ZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvQW5kcm9pZFZlcnNpb24udHh0IGIvY2xhbmctMjY5MDM4NS9BbmRyb2lkVmVyc2lvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyNmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvQW5kcm9pZFZlcnNpb24udHh0CkBAIC0wLDAgKzEgQEAKKzMuOC4yNTYyMjkKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvTU9EVUxFX0xJQ0VOU0VfQlNEX0xJS0UgYi9jbGFuZy0yNjkwMzg1L01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L01PRFVMRV9MSUNFTlNFX01JVCBiL2NsYW5nLTI2OTAzODUvTU9EVUxFX0xJQ0VOU0VfTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L01PRFVMRV9MSUNFTlNFX01JVApkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9OT1RJQ0UgYi9jbGFuZy0yNjkwMzg1L05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2FkZGVmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9OT1RJQ0UKQEAgLTAsMCArMSw0NTcgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTExWTSBSZWxlYXNlIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDE0IFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBMTFZNIHNvZnR3YXJlIGNvbnRhaW5zIGNvZGUgd3JpdHRlbiBieSB0aGlyZCBwYXJ0aWVzLiAgU3VjaCBzb2Z0d2FyZSB3aWxsCitoYXZlIGl0cyBvd24gaW5kaXZpZHVhbCBMSUNFTlNFLlRYVCBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgYXBwZWFycy4KK1RoaXMgZmlsZSB3aWxsIGRlc2NyaWJlIHRoZSBjb3B5cmlnaHRzLCBsaWNlbnNlLCBhbmQgcmVzdHJpY3Rpb25zIHdoaWNoIGFwcGx5Cit0byB0aGF0IGNvZGUuCisKK1RoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGluIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UKK2FwcGxpZXMgdG8gYWxsIGNvZGUgaW4gdGhlIExMVk0gRGlzdHJpYnV0aW9uLCBhbmQgbm90aGluZyBpbiBhbnkgb2YgdGhlCitvdGhlciBsaWNlbnNlcyBnaXZlcyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSBvciB0aGUKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCitTb2Z0d2FyZS4KKworVGhlIGZvbGxvd2luZyBwaWVjZXMgb2Ygc29mdHdhcmUgaGF2ZSBhZGRpdGlvbmFsIG9yIGFsdGVybmF0ZSBjb3B5cmlnaHRzLAorbGljZW5zZXMsIGFuZC9vciByZXN0cmljdGlvbnM6CisKK1Byb2dyYW0gICAgICAgICAgICAgRGlyZWN0b3J5CistLS0tLS0tICAgICAgICAgICAgIC0tLS0tLS0tLQorPG5vbmUgeWV0PgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorY29tcGlsZXJfcnQgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBjb21waWxlcl9ydCBsaWJyYXJ5IGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YgdGhpcyBjb2RlIHlvdSBtYXkgY2hvb3NlCit0byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLCB5b3UgYWdyZWUgdG8gYWxsb3cgeW91ciBjb2RlCit0byBiZSB1c2VkIHVuZGVyIGJvdGguCisKK0Z1bGwgdGV4dCBvZiB0aGUgcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHRzIGFuZCBMaWNlbnNlcyBmb3IgVGhpcmQgUGFydHkgU29mdHdhcmUgRGlzdHJpYnV0ZWQgd2l0aCBMTFZNOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgTExWTSBzb2Z0d2FyZSBjb250YWlucyBjb2RlIHdyaXR0ZW4gYnkgdGhpcmQgcGFydGllcy4gIFN1Y2ggc29mdHdhcmUgd2lsbAoraGF2ZSBpdHMgb3duIGluZGl2aWR1YWwgTElDRU5TRS5UWFQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGFwcGVhcnMuCitUaGlzIGZpbGUgd2lsbCBkZXNjcmliZSB0aGUgY29weXJpZ2h0cywgbGljZW5zZSwgYW5kIHJlc3RyaWN0aW9ucyB3aGljaCBhcHBseQordG8gdGhhdCBjb2RlLgorCitUaGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpbiB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZSBMaWNlbnNlCithcHBsaWVzIHRvIGFsbCBjb2RlIGluIHRoZSBMTFZNIERpc3RyaWJ1dGlvbiwgYW5kIG5vdGhpbmcgaW4gYW55IG9mIHRoZQorb3RoZXIgbGljZW5zZXMgZ2l2ZXMgcGVybWlzc2lvbiB0byB1c2UgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0gb3IgdGhlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworU29mdHdhcmUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitsaWJjKysgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBsaWJjKysgbGlicmFyeSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIGJvdGggdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKKyJCU0QtTGlrZSIgbGljZW5zZSBhbmQgdGhlIE1JVCBsaWNlbnNlLiAgQXMgYSB1c2VyIG9mIHRoaXMgY29kZSB5b3UgbWF5IGNob29zZQordG8gdXNlIGl0IHVuZGVyIGVpdGhlciBsaWNlbnNlLiAgQXMgYSBjb250cmlidXRvciwgeW91IGFncmVlIHRvIGFsbG93IHlvdXIgY29kZQordG8gYmUgdXNlZCB1bmRlciBib3RoLgorCitGdWxsIHRleHQgb2YgdGhlIHJlbGV2YW50IGxpY2Vuc2VzIGlzIGluY2x1ZGVkIGJlbG93LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieToKKworICAgIExMVk0gVGVhbQorCisgICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCisKKyAgICBodHRwOi8vbGx2bS5vcmcKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aAordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0CisgICAgICBVcmJhbmEtQ2hhbXBhaWduLCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8KKyAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgV0lUSCBUSEUKK1NPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbGliYysrYWJpIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgbGliYysrYWJpIGxpYnJhcnkgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzCisiQlNELUxpa2UiIGxpY2Vuc2UgYW5kIHRoZSBNSVQgbGljZW5zZS4gIEFzIGEgdXNlciBvZiB0aGlzIGNvZGUgeW91IG1heSBjaG9vc2UKK3RvIHVzZSBpdCB1bmRlciBlaXRoZXIgbGljZW5zZS4gIEFzIGEgY29udHJpYnV0b3IsIHlvdSBhZ3JlZSB0byBhbGxvdyB5b3VyIGNvZGUKK3RvIGJlIHVzZWQgdW5kZXIgYm90aC4KKworRnVsbCB0ZXh0IG9mIHRoZSByZWxldmFudCBsaWNlbnNlcyBpcyBpbmNsdWRlZCBiZWxvdy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQorT3BlbiBTb3VyY2UgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYnk6CisKKyAgICBMTFZNIFRlYW0KKworICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgorCisgICAgaHR0cDovL2xsdm0ub3JnCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIHdpdGgKK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIExMVk0gVGVhbSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdAorICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCisgICAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT05UUklCVVRPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCitTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgbGlzdGVkIGluIENSRURJVFMuVFhUCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2xpYmMrK2FiaSBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGxpYmMrK2FiaSBsaWJyYXJ5IGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcworIkJTRC1MaWtlIiBsaWNlbnNlIGFuZCB0aGUgTUlUIGxpY2Vuc2UuICBBcyBhIHVzZXIgb2YgdGhpcyBjb2RlIHlvdSBtYXkgY2hvb3NlCit0byB1c2UgaXQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuICBBcyBhIGNvbnRyaWJ1dG9yLCB5b3UgYWdyZWUgdG8gYWxsb3cgeW91ciBjb2RlCit0byBiZSB1c2VkIHVuZGVyIGJvdGguCisKK0Z1bGwgdGV4dCBvZiB0aGUgcmVsZXZhbnQgbGljZW5zZXMgaXMgaW5jbHVkZWQgYmVsb3cuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDA5LTIwMTUgYnkgdGhlIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgaW4gQ1JFRElUUy5UWFQKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIGxpc3RlZCBpbiBDUkVESVRTLlRYVAorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMTFZNIFJlbGVhc2UgTGljZW5zZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKK09wZW4gU291cmNlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDAzLTIwMTQgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGJ5OgorCisgICAgTExWTSBUZWFtCisKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KKworICAgIGh0dHA6Ly9sbHZtLm9yZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCitzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKKyAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bworICAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAgICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBXSVRIIFRIRQorU09GVFdBUkUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0cyBhbmQgTGljZW5zZXMgZm9yIFRoaXJkIFBhcnR5IFNvZnR3YXJlIERpc3RyaWJ1dGVkIHdpdGggTExWTToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIExMVk0gc29mdHdhcmUgY29udGFpbnMgY29kZSB3cml0dGVuIGJ5IHRoaXJkIHBhcnRpZXMuICBTdWNoIHNvZnR3YXJlIHdpbGwKK2hhdmUgaXRzIG93biBpbmRpdmlkdWFsIExJQ0VOU0UuVFhUIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBhcHBlYXJzLgorVGhpcyBmaWxlIHdpbGwgZGVzY3JpYmUgdGhlIGNvcHlyaWdodHMsIGxpY2Vuc2UsIGFuZCByZXN0cmljdGlvbnMgd2hpY2ggYXBwbHkKK3RvIHRoYXQgY29kZS4KKworVGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgaW4gdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UgTGljZW5zZQorYXBwbGllcyB0byBhbGwgY29kZSBpbiB0aGUgTExWTSBEaXN0cmlidXRpb24sIGFuZCBub3RoaW5nIGluIGFueSBvZiB0aGUKK290aGVyIGxpY2Vuc2VzIGdpdmVzIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFtIG9yIHRoZQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKK1NvZnR3YXJlLgorCitUaGUgZm9sbG93aW5nIHBpZWNlcyBvZiBzb2Z0d2FyZSBoYXZlIGFkZGl0aW9uYWwgb3IgYWx0ZXJuYXRlIGNvcHlyaWdodHMsCitsaWNlbnNlcywgYW5kL29yIHJlc3RyaWN0aW9uczoKKworUHJvZ3JhbSAgICAgICAgICAgICBEaXJlY3RvcnkKKy0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tCitBdXRvY29uZiAgICAgICAgICAgIGxsdm0vYXV0b2NvbmYKKyAgICAgICAgICAgICAgICAgICAgbGx2bS9wcm9qZWN0cy9Nb2R1bGVNYWtlci9hdXRvY29uZgorR29vZ2xlIFRlc3QgICAgICAgICBsbHZtL3V0aWxzL3VuaXR0ZXN0L2dvb2dsZXRlc3QKK09wZW5CU0QgcmVnZXggICAgICAgbGx2bS9saWIvU3VwcG9ydC97cmVnKiwgQ09QWVJJR0hULnJlZ2V4fQorcHl5YW1sIHRlc3RzICAgICAgICBsbHZtL3Rlc3QvWUFNTFBhcnNlci97Ki5kYXRhLCBMSUNFTlNFLlRYVH0KK0FSTSBjb250cmlidXRpb25zICAgbGx2bS9saWIvVGFyZ2V0L0FSTS9MSUNFTlNFLlRYVAorbWQ1IGNvbnRyaWJ1dGlvbnMgICBsbHZtL2xpYi9TdXBwb3J0L01ENS5jcHAgbGx2bS9pbmNsdWRlL2xsdm0vU3VwcG9ydC9NRDUuaApkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4vRmlsZUNoZWNrIGIvY2xhbmctMjY5MDM4NS9iaW4vRmlsZUNoZWNrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcxMWZhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9GaWxlQ2hlY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4vYXJtNjQtdjhhL2FuYWx5emVyIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtNjQtdjhhL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjBlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgYWFyY2g2NC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4vYXJtNjQtdjhhL2FuYWx5emVyKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9hcm02NC12OGEvYW5hbHl6ZXIrKwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGEyZTIwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtNjQtdjhhL2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBhYXJjaDY0LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL2FybWVhYmktdjdhLWhhcmQvYW5hbHl6ZXIgYi9jbGFuZy0yNjkwMzg1L2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNzA4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IGFybXY3LW5vbmUtbGludXgtYW5kcm9pZGVhYmkgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS12N2EtaGFyZC9hbmFseXplcisrIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS12N2EtaGFyZC9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDE2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9hcm1lYWJpLXY3YS1oYXJkL2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBhcm12Ny1ub25lLWxpbnV4LWFuZHJvaWRlYWJpICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS12N2EvYW5hbHl6ZXIgYi9jbGFuZy0yNjkwMzg1L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTcwOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS12N2EvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgYXJtdjctbm9uZS1saW51eC1hbmRyb2lkZWFiaSAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2Jpbi9hcm1lYWJpLXY3YS9hbmFseXplcisrIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS12N2EvYW5hbHl6ZXIrKwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTQxNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS12N2EvYW5hbHl6ZXIrKwpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAtdGFyZ2V0IGFybXY3LW5vbmUtbGludXgtYW5kcm9pZGVhYmkgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2Jpbi9hcm1lYWJpL2FuYWx5emVyIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS9hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTBhYTgzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS9hbmFseXplcgpAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCitpZiBbICIkMSIgIT0gIi1jYzEiIF07IHRoZW4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgLXRhcmdldCBhcm12NXRlLW5vbmUtbGludXgtYW5kcm9pZGVhYmkgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS9hbmFseXplcisrIGIvY2xhbmctMjY5MDM4NS9iaW4vYXJtZWFiaS9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjM3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9hcm1lYWJpL2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBhcm12NXRlLW5vbmUtbGludXgtYW5kcm9pZGVhYmkgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrICIkQCIKK2ZpCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2Jpbi9hc2FuX2RldmljZV9zZXR1cCBiL2NsYW5nLTI2OTAzODUvYmluL2FzYW5fZGV2aWNlX3NldHVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjYjdiOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9hc2FuX2RldmljZV9zZXR1cApAQCAtMCwwICsxLDQzNCBAQAorIyEvYmluL2Jhc2gKKyM9PT0tIGxpYi9hc2FuL3NjcmlwdHMvYXNhbl9kZXZpY2Vfc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jCisjCisjICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisjIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKyMKKyMgUHJlcGFyZSBBbmRyb2lkIGRldmljZSB0byBydW4gQVNhbiBhcHBsaWNhdGlvbnMuCisjCisjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IworCitzZXQgLWUKKworSEVSRT0iJChjZCAiJChkaXJuYW1lICIkMCIpIiAmJiBwd2QpIgorCityZXZlcnQ9bm8KK2V4dHJhX29wdGlvbnM9CitkZXZpY2U9CitsaWI9Cit1c2Vfc3U9MAorCitmdW5jdGlvbiB1c2FnZSB7CisgICAgZWNobyAidXNhZ2U6ICQwIFstLXJldmVydF0gWy0tZGV2aWNlIGRldmljZS1pZF0gWy0tbGliIHBhdGhdIFstLWV4dHJhLW9wdGlvbnMgb3B0aW9uc10iCisgICAgZWNobyAiICAtLXJldmVydDogVW5pbnN0YWxsIEFTYW4gZnJvbSB0aGUgZGV2aWNlLiIKKyAgICBlY2hvICIgIC0tbGliOiBQYXRoIHRvIEFTYW4gcnVudGltZSBsaWJyYXJ5LiIKKyAgICBlY2hvICIgIC0tZXh0cmEtb3B0aW9uczogRXh0cmEgQVNBTl9PUFRJT05TLiIKKyAgICBlY2hvICIgIC0tZGV2aWNlOiBJbnN0YWxsIHRvIHRoZSBnaXZlbiBkZXZpY2UuIFVzZSAnYWRiIGRldmljZXMnIHRvIGZpbmQiCisgICAgZWNobyAiICAgICAgICAgICAgZGV2aWNlLWlkLiIKKyAgICBlY2hvICIgIC0tdXNlLXN1OiBVc2UgJ3N1IC1jJyBwcmVmaXggZm9yIGV2ZXJ5IGFkYiBjb21tYW5kIGluc3RlYWQgb2YgdXNpbmciCisgICAgZWNobyAiICAgICAgICAgICAgJ2FkYiByb290JyBvbmNlLiIKKyAgICBlY2hvCisgICAgZXhpdCAxCit9CisKK2Z1bmN0aW9uIGFkYl9wdXNoIHsKKyAgaWYgWyAkdXNlX3N1IC1lcSAwIF07IHRoZW4KKyAgICAkQURCIHB1c2ggIiQxIiAiJDIiCisgIGVsc2UKKyAgICBsb2NhbCBGSUxFTkFNRT0kKGJhc2VuYW1lICQxKQorICAgICRBREIgcHVzaCAiJDEiICIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FIgorICAgICRBREIgc2hlbGwgc3UgLWMgInJtIFxcXCIkMi8kRklMRU5BTUVcXFwiIiA+Ji9kZXYvbnVsbAorICAgICRBREIgc2hlbGwgc3UgLWMgImNhdCBcXFwiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRVxcXCIgPiBcXFwiJDIvJEZJTEVOQU1FXFxcIiIKKyAgICAkQURCIHNoZWxsIHN1IC1jICJybSBcXFwiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRVxcXCIiCisgIGZpCit9CisKK2Z1bmN0aW9uIGFkYl9yZW1vdW50IHsKKyAgaWYgWyAkdXNlX3N1IC1lcSAwIF07IHRoZW4KKyAgICAkQURCIHJlbW91bnQKKyAgZWxzZQorICAgIGxvY2FsIFNUT1JBR0U9YCRBREIgc2hlbGwgbW91bnQgfCBncmVwIC9zeXN0ZW0gfCBjdXQgLWQgJyAnIC1mMWAKKyAgICBpZiBbICIkU1RPUkFHRSIgIT0gIiIgXTsgdGhlbgorICAgICAgZWNobyBSZW1vdW50aW5nICRTVE9SQUdFIGF0IC9zeXN0ZW0KKyAgICAgICRBREIgc2hlbGwgc3UgLWMgIm1vdW50IC1vIHJlbW91bnQscncgJFNUT1JBR0UgL3N5c3RlbSIKKyAgICBlbHNlCisgICAgICBlY2hvIEZhaWxlZCB0byBnZXQgc3RvcmFnZSBkZXZpY2UgbmFtZSBmb3IgIi9zeXN0ZW0iIG1vdW50IHBvaW50CisgICAgZmkKKyAgZmkKK30KKworZnVuY3Rpb24gYWRiX3NoZWxsIHsKKyAgaWYgWyAkdXNlX3N1IC1lcSAwIF07IHRoZW4KKyAgICAkQURCIHNoZWxsICRACisgIGVsc2UKKyAgICAkQURCIHNoZWxsIHN1IC1jICIkKiIKKyAgZmkKK30KKworZnVuY3Rpb24gYWRiX3Jvb3QgeworICBpZiBbICR1c2Vfc3UgLWVxIDAgXTsgdGhlbgorICAgICRBREIgcm9vdAorICBmaQorfQorCitmdW5jdGlvbiBhZGJfd2FpdF9mb3JfZGV2aWNlIHsKKyAgJEFEQiB3YWl0LWZvci1kZXZpY2UKK30KKworZnVuY3Rpb24gYWRiX3B1bGwgeworICBpZiBbICR1c2Vfc3UgLWVxIDAgXTsgdGhlbgorICAgICRBREIgcHVsbCAiJDEiICIkMiIKKyAgZWxzZQorICAgIGxvY2FsIEZJTEVOQU1FPSQoYmFzZW5hbWUgJDEpCisgICAgJEFEQiBzaGVsbCBybSAiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRSIgPiYvZGV2L251bGwKKyAgICAkQURCIHNoZWxsIHN1IC1jICJbIC1mIFxcXCIkMVxcXCIgXSAmJiBjYXQgXFxcIiQxXFxcIiA+IFxcXCIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FXFxcIiAmJiBjaG93biByb290LnNoZWxsIFxcXCIvZGF0YS9sb2NhbC90bXAvJEZJTEVOQU1FXFxcIiAmJiBjaG1vZCA3NTUgXFxcIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUVcXFwiIiAmJgorICAgICRBREIgcHVsbCAiL2RhdGEvbG9jYWwvdG1wLyRGSUxFTkFNRSIgIiQyIiA+Ji9kZXYvbnVsbCAmJiAkQURCIHNoZWxsICJybSBcIi9kYXRhL2xvY2FsL3RtcC8kRklMRU5BTUVcIiIKKyAgZmkKK30KKworZnVuY3Rpb24gZ2V0X2RldmljZV9hcmNoIHsgIyBPVVQgT1VUNjQKKyAgICBsb2NhbCBfb3V0dmFyPSQxCisgICAgbG9jYWwgX291dHZhcjY0PSQyCisgICAgbG9jYWwgX0FCST0kKGFkYl9zaGVsbCBnZXRwcm9wIHJvLnByb2R1Y3QuY3B1LmFiaSkKKyAgICBsb2NhbCBfQVJDSD0KKyAgICBsb2NhbCBfQVJDSDY0PQorICAgIGlmIFtbICRfQUJJID09IHg4NiogXV07IHRoZW4KKyAgICAgICAgX0FSQ0g9aTY4NgorICAgIGVsaWYgW1sgJF9BQkkgPT0gYXJtZWFiaSogXV07IHRoZW4KKyAgICAgICAgX0FSQ0g9YXJtCisgICAgZWxpZiBbWyAkX0FCSSA9PSBhcm02NC12OGEqIF1dOyB0aGVuCisgICAgICAgIF9BUkNIPWFybQorICAgICAgICBfQVJDSDY0PWFhcmNoNjQKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlVucmVjb2duaXplZCBkZXZpY2UgQUJJOiAkX0FCSSIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBldmFsICRfb3V0dmFyPVwkX0FSQ0gKKyAgICBldmFsICRfb3V0dmFyNjQ9XCRfQVJDSDY0Cit9CisKK3doaWxlIFtbICQjID4gMCBdXTsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tcmV2ZXJ0KQorICAgICAgcmV2ZXJ0PXllcworICAgICAgOzsKKyAgICAtLWV4dHJhLW9wdGlvbnMpCisgICAgICBzaGlmdAorICAgICAgaWYgW1sgJCMgPT0gMCBdXTsgdGhlbgorICAgICAgICBlY2hvICItLWV4dHJhLW9wdGlvbnMgcmVxdWlyZXMgYW4gYXJndW1lbnQuIgorICAgICAgICBleGl0IDEKKyAgICAgIGZpCisgICAgICBleHRyYV9vcHRpb25zPSIkMSIKKyAgICAgIDs7CisgICAgLS1saWIpCisgICAgICBzaGlmdAorICAgICAgaWYgW1sgJCMgPT0gMCBdXTsgdGhlbgorICAgICAgICBlY2hvICItLWxpYiByZXF1aXJlcyBhbiBhcmd1bWVudC4iCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIGxpYj0iJDEiCisgICAgICA7OworICAgIC0tZGV2aWNlKQorICAgICAgc2hpZnQKKyAgICAgIGlmIFtbICQjID09IDAgXV07IHRoZW4KKyAgICAgICAgZWNobyAiLS1kZXZpY2UgcmVxdWlyZXMgYW4gYXJndW1lbnQuIgorICAgICAgICBleGl0IDEKKyAgICAgIGZpCisgICAgICBkZXZpY2U9IiQxIgorICAgICAgOzsKKyAgICAtLXVzZS1zdSkKKyAgICAgIHVzZV9zdT0xCisgICAgICA7OworICAgICopCisgICAgICB1c2FnZQorICAgICAgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitBREI9JHtBREI6LWFkYn0KK2lmIFtbIHgkZGV2aWNlICE9IHggXV07IHRoZW4KKyAgICBBREI9IiRBREIgLXMgJGRldmljZSIKK2ZpCisKK2lmIFsgJHVzZV9zdSAtZXEgMSBdOyB0aGVuCisgICMgVGVzdCBpZiAnc3UnIGlzIHByZXNlbnQgb24gdGhlIGRldmljZQorICBTVV9URVNUX09VVD1gJEFEQiBzaGVsbCBzdSAtYyAiZWNobyBmb28iIDI+JjEgfCBzZWQgJ3MvXHIkLy8nYAorICBpZiBbICQ/ICE9IDAgLW8gIiRTVV9URVNUX09VVCIgIT0gImZvbyIgXTsgdGhlbgorICAgIGVjaG8gIkVSUk9SOiBDYW5ub3QgdXNlICdzdSAtYyc6IgorICAgIGVjaG8gIiQgYWRiIHNoZWxsIHN1IC1jIFwiZWNobyBmb29cIiIKKyAgICBlY2hvICRTVV9URVNUX09VVAorICAgIGVjaG8gIkNoZWNrIHRoYXQgJ3N1JyBiaW5hcnkgaXMgY29ycmVjdGx5IGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlIG9yIG9taXQiCisgICAgZWNobyAiICAgICAgICAgICAgLS11c2Utc3UgZmxhZyIKKyAgICBleGl0IDEKKyAgZmkKK2ZpCisKK2VjaG8gJz4+IFJlbW91bnRpbmcgL3N5c3RlbSBydycKK2FkYl93YWl0X2Zvcl9kZXZpY2UKK2FkYl9yb290CithZGJfd2FpdF9mb3JfZGV2aWNlCithZGJfcmVtb3VudAorYWRiX3dhaXRfZm9yX2RldmljZQorCitnZXRfZGV2aWNlX2FyY2ggQVJDSCBBUkNINjQKK2VjaG8gIlRhcmdldCBhcmNoaXRlY3R1cmU6ICRBUkNIIgorQVNBTl9SVD0ibGliY2xhbmdfcnQuYXNhbi0kQVJDSC1hbmRyb2lkLnNvIgoraWYgW1sgLW4gJEFSQ0g2NCBdXTsgdGhlbgorICBlY2hvICJUYXJnZXQgYXJjaGl0ZWN0dXJlOiAkQVJDSDY0IgorICBBU0FOX1JUNjQ9ImxpYmNsYW5nX3J0LmFzYW4tJEFSQ0g2NC1hbmRyb2lkLnNvIgorZmkKKworaWYgW1sgeCRyZXZlcnQgPT0geHllcyBdXTsgdGhlbgorICAgIGVjaG8gJz4+IFVuaW5zdGFsbGluZyBBU2FuJworCisgICAgaWYgISBhZGJfc2hlbGwgbHMgLWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MgfCBncmVwIC1vICdcLT4uKmFwcF9wcm9jZXNzJyA+Ji9kZXYvbnVsbDsgdGhlbgorICAgICAgZWNobyAnPj4gUHJlLUwgZGV2aWNlIGRldGVjdGVkLicKKyAgICAgIGFkYl9zaGVsbCBtdiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy5yZWFsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCisgICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXNhbndyYXBwZXIKKyAgICBlbGlmICEgYWRiX3NoZWxsIGxzIC1sIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQucmVhbCB8IGdyZXAgLW8gJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknID4mL2Rldi9udWxsOyB0aGVuCisgICAgICAjIDY0LWJpdCBpbnN0YWxsYXRpb24uCisgICAgICBhZGJfc2hlbGwgbXYgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMi5yZWFsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIKKyAgICAgIGFkYl9zaGVsbCBtdiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczY0LnJlYWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NAorICAgICAgYWRiX3NoZWxsIHJtIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyCisgICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXNhbndyYXBwZXI2NAorICAgIGVsc2UKKyAgICAgICMgMzItYml0IGluc3RhbGxhdGlvbi4KKyAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy53cmFwCisgICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXNhbndyYXBwZXIKKyAgICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcworICAgICAgYWRiX3NoZWxsIGxuIC1zIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKKyAgICBmaQorCisgICAgZWNobyAnPj4gUmVzdGFydGluZyBzaGVsbCcKKyAgICBhZGJfc2hlbGwgc3RvcAorICAgIGFkYl9zaGVsbCBzdGFydAorCisgICAgIyBSZW1vdmUgdGhlIGxpYnJhcnkgb24gdGhlIGxhc3Qgc3RlcCB0byBnaXZlIGEgY2hhbmNlIHRvIHRoZSAnc3UnIGJpbmFyeSB0bworICAgICMgYmUgZXhlY3V0ZWQgd2l0aG91dCBwcm9ibGVtLgorICAgIGFkYl9zaGVsbCBybSAvc3lzdGVtL2xpYi8kQVNBTl9SVAorCisgICAgZWNobyAnPj4gRG9uZScKKyAgICBleGl0IDAKK2ZpCisKK2lmIFtbIC1kICIkbGliIiBdXTsgdGhlbgorICAgIEFTQU5fUlRfUEFUSD0iJGxpYiIKK2VsaWYgW1sgLWYgIiRsaWIiICYmICIkbGliIiA9PSAqIiRBU0FOX1JUIiBdXTsgdGhlbgorICAgIEFTQU5fUlRfUEFUSD0kKGRpcm5hbWUgIiRsaWIiKQorZWxpZiBbWyAtZiAiJEhFUkUvJEFTQU5fUlQiIF1dOyB0aGVuCisgICAgQVNBTl9SVF9QQVRIPSIkSEVSRSIKK2VsaWYgW1sgJChiYXNlbmFtZSAiJEhFUkUiKSA9PSAiYmluIiBdXTsgdGhlbgorICAgICMgV2UgY291bGQgYmUgaW4gdGhlIHRvb2xjaGFpbidzIGJhc2UgZGlyZWN0b3J5LgorICAgICMgQ29uc2lkZXIgLi4vbGliLCAuLi9saWIvYXNhbiwgLi4vbGliL2xpbnV4LAorICAgICMgLi4vbGliL2NsYW5nLyRWRVJTSU9OL2xpYi9saW51eCwgYW5kIC4uL2xpYjY0L2NsYW5nLyRWRVJTSU9OL2xpYi9saW51eC4KKyAgICBQPSQobHMgIiRIRVJFIi8uLi9saWIvIiRBU0FOX1JUIiBcCisgICAgICAgICAgICIkSEVSRSIvLi4vbGliL2FzYW4vIiRBU0FOX1JUIiBcCisgICAgICAgICAgICIkSEVSRSIvLi4vbGliL2xpbnV4LyIkQVNBTl9SVCIgXAorICAgICAgICAgICAiJEhFUkUiLy4uL2xpYi9jbGFuZy8qL2xpYi9saW51eC8iJEFTQU5fUlQiIFwKKyAgICAgICAgICAgIiRIRVJFIi8uLi9saWI2NC9jbGFuZy8qL2xpYi9saW51eC8iJEFTQU5fUlQiIDI+L2Rldi9udWxsIHwgc29ydCB8IHRhaWwgLTEpCisgICAgaWYgW1sgLW4gIiRQIiBdXTsgdGhlbgorICAgICAgICBBU0FOX1JUX1BBVEg9IiQoZGlybmFtZSAiJFAiKSIKKyAgICBmaQorZmkKKworaWYgW1sgLXogIiRBU0FOX1JUX1BBVEgiIHx8ICEgLWYgIiRBU0FOX1JUX1BBVEgvJEFTQU5fUlQiIF1dOyB0aGVuCisgICAgZWNobyAiPj4gQVNhbiBydW50aW1lIGxpYnJhcnkgbm90IGZvdW5kIgorICAgIGV4aXQgMQorZmkKKworaWYgW1sgLW4gIiRBU0FOX1JUNjQiIF1dOyB0aGVuCisgIGlmIFtbIC16ICIkQVNBTl9SVF9QQVRIIiB8fCAhIC1mICIkQVNBTl9SVF9QQVRILyRBU0FOX1JUNjQiIF1dOyB0aGVuCisgICAgZWNobyAiPj4gQVNhbiBydW50aW1lIGxpYnJhcnkgbm90IGZvdW5kIgorICAgIGV4aXQgMQorICBmaQorZmkKKworVE1QRElSQkFTRT0kKG1rdGVtcCAtZCkKK1RNUERJUk9MRD0iJFRNUERJUkJBU0Uvb2xkIgorVE1QRElSPSIkVE1QRElSQkFTRS9uZXciCitta2RpciAiJFRNUERJUk9MRCIKKworUkVMRUFTRT0kKGFkYl9zaGVsbCBnZXRwcm9wIHJvLmJ1aWxkLnZlcnNpb24ucmVsZWFzZSkKK1BSRV9MPTAKK2lmIGVjaG8gIiRSRUxFQVNFIiB8IGdyZXAgJ140XC4nID4mL2Rldi9udWxsOyB0aGVuCisgICAgUFJFX0w9MQorZmkKKworaWYgISBhZGJfc2hlbGwgbHMgLWwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MgfCBncmVwIC1vICdcLT4uKmFwcF9wcm9jZXNzJyA+Ji9kZXYvbnVsbDsgdGhlbgorCisgICAgaWYgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MucmVhbCAvZGV2L251bGwgPiYvZGV2L251bGw7IHRoZW4KKyAgICAgICAgZWNobyAnPj4gT2xkLXN0eWxlIEFTYW4gaW5zdGFsbGF0aW9uIGRldGVjdGVkLiBSZXZlcnRpbmcuJworICAgICAgICBhZGJfc2hlbGwgbXYgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MucmVhbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcworICAgIGZpCisKKyAgICBlY2hvICc+PiBQcmUtTCBkZXZpY2UgZGV0ZWN0ZWQuIFNldHRpbmcgdXAgYXBwX3Byb2Nlc3Mgc3ltbGluay4nCisgICAgYWRiX3NoZWxsIG12IC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIKKyAgICBhZGJfc2hlbGwgbG4gLXMgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzcworZmkKKworZWNobyAnPj4gQ29weWluZyBmaWxlcyBmcm9tIHRoZSBkZXZpY2UnCitpZiBbWyAtbiAiJEFTQU5fUlQ2NCIgXV07IHRoZW4KKyAgYWRiX3B1bGwgL3N5c3RlbS9saWIvIiRBU0FOX1JUIiAiJFRNUERJUk9MRCIgfHwgdHJ1ZQorICBhZGJfcHVsbCAvc3lzdGVtL2xpYjY0LyIkQVNBTl9SVDY0IiAiJFRNUERJUk9MRCIgfHwgdHJ1ZQorICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczMyICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzMzIucmVhbCAiJFRNUERJUk9MRCIgfHwgdHJ1ZQorICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2VzczY0ICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzNjQucmVhbCAiJFRNUERJUk9MRCIgfHwgdHJ1ZQorICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlciAiJFRNUERJUk9MRCIgfHwgdHJ1ZQorICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hc2Fud3JhcHBlcjY0ICIkVE1QRElST0xEIiB8fCB0cnVlCitlbHNlCisgIGFkYl9wdWxsIC9zeXN0ZW0vbGliLyIkQVNBTl9SVCIgIiRUTVBESVJPTEQiIHx8IHRydWUKKyAgYWRiX3B1bGwgL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiAiJFRNUERJUk9MRCIgfHwgdHJ1ZQorICBhZGJfcHVsbCAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy53cmFwICIkVE1QRElST0xEIiB8fCB0cnVlCisgIGFkYl9wdWxsIC9zeXN0ZW0vYmluL2FzYW53cmFwcGVyICIkVE1QRElST0xEIiB8fCB0cnVlCitmaQorY3AgLXIgIiRUTVBESVJPTEQiICIkVE1QRElSIgorCitpZiBbWyAtZiAiJFRNUERJUi9hcHBfcHJvY2Vzcy53cmFwIiB8fCAtZiAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiIF1dOyB0aGVuCisgICAgZWNobyAiPj4gUHJldmlvdXMgaW5zdGFsbGF0aW9uIGRldGVjdGVkIgorZWxzZQorICAgIGVjaG8gIj4+IE5ldyBpbnN0YWxsYXRpb24iCitmaQorCitlY2hvICc+PiBHZW5lcmF0aW5nIHdyYXBwZXJzJworCitjcCAiJEFTQU5fUlRfUEFUSC8kQVNBTl9SVCIgIiRUTVBESVIvIgoraWYgW1sgLW4gIiRBU0FOX1JUNjQiIF1dOyB0aGVuCisgIGNwICIkQVNBTl9SVF9QQVRILyRBU0FOX1JUNjQiICIkVE1QRElSLyIKK2ZpCisKKyMgRklYTUU6IGFsbG9jX2RlYWxsb2NfbWlzbWF0Y2g9MCBwcmV2ZW50cyBhIGZhaWx1cmUgaW4gbGliZHZtIHN0YXJ0dXAsCisjIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIGEgcmVhbCBidWcgKHByb2JhYmx5IG5vdCkuCitBU0FOX09QVElPTlM9c3RhcnRfZGVhY3RpdmF0ZWQ9MSxhbGxvY19kZWFsbG9jX21pc21hdGNoPTAsbWFsbG9jX2NvbnRleHRfc2l6ZT0wCisKK2Z1bmN0aW9uIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyIHsgIyBmcm9tLCB0bywgYXNhbl9ydAorICBsb2NhbCBfZnJvbT0kMQorICBsb2NhbCBfdG89JDIKKyAgbG9jYWwgX2FzYW5fcnQ9JDMKKyAgY2F0IDw8RU9GID4iJFRNUERJUi8kX2Zyb20iCisjIS9zeXN0ZW0vYmluL3NoLWZyb20tenlnb3RlCitBU0FOX09QVElPTlM9JEFTQU5fT1BUSU9OUyBcXAorQVNBTl9BQ1RJVkFUSU9OX09QVElPTlM9aW5jbHVkZV9pZl9leGlzdHM9L2RhdGEvbG9jYWwvdG1wL2FzYW4ub3B0aW9ucy4lYiBcXAorTERfUFJFTE9BRD1cJExEX1BSRUxPQUQ6JF9hc2FuX3J0IFxcCitleGVjICRfdG8gXCRACisKK0VPRgorfQorCisjIE9uIEFuZHJvaWQtTCBub3QgYWxsb3dpbmcgdXNlciBzZWd2IGhhbmRsZXIgYnJlYWtzIHNvbWUgYXBwbGljYXRpb25zLgoraWYgW1sgUFJFX0wgLWVxIDAgXV07IHRoZW4KKyAgICBBU0FOX09QVElPTlM9IiRBU0FOX09QVElPTlMsYWxsb3dfdXNlcl9zZWd2X2hhbmRsZXI9MSIKK2ZpCisKK2lmIFtbIHgkZXh0cmFfb3B0aW9ucyAhPSB4IF1dIDsgdGhlbgorICAgIEFTQU5fT1BUSU9OUz0iJEFTQU5fT1BUSU9OUywkZXh0cmFfb3B0aW9ucyIKK2ZpCisKKyMgWnlnb3RlIHdyYXBwZXIuCitpZiBbWyAtZiAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiBdXTsgdGhlbgorICAjIEEgNjQtYml0IGRldmljZS4KKyAgaWYgW1sgISAtZiAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiIF1dOyB0aGVuCisgICAgIyBOZXcgaW5zdGFsbGF0aW9uLgorICAgIG12ICIkVE1QRElSL2FwcF9wcm9jZXNzMzIiICIkVE1QRElSL2FwcF9wcm9jZXNzMzIucmVhbCIKKyAgICBtdiAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiCisgIGZpCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2VzczMyIiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMi5yZWFsIiAiJEFTQU5fUlQiCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2VzczY0IiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3M2NC5yZWFsIiAiJEFTQU5fUlQ2NCIKK2Vsc2UKKyAgIyBBIDMyLWJpdCBkZXZpY2UuCisgIGdlbmVyYXRlX3p5Z290ZV93cmFwcGVyICJhcHBfcHJvY2Vzcy53cmFwIiAiL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MzMiIgIiRBU0FOX1JUIgorZmkKKworIyBHZW5lcmFsIGNvbW1hbmQtbGluZSB0b29sIHdyYXBwZXIgKHVzZSBmb3IgYW55dGhpbmcgdGhhdCdzIG5vdCBzdGFydGVkIGFzCisjIHp5Z290ZSkuCitjYXQgPDxFT0YgPiIkVE1QRElSL2FzYW53cmFwcGVyIgorIyEvc3lzdGVtL2Jpbi9zaAorTERfUFJFTE9BRD0kQVNBTl9SVCBcXAorZXhlYyBcJEAKKworRU9GCisKK2lmIFtbIC1uICIkQVNBTl9SVDY0IiBdXTsgdGhlbgorICBjYXQgPDxFT0YgPiIkVE1QRElSL2FzYW53cmFwcGVyNjQiCisjIS9zeXN0ZW0vYmluL3NoCitMRF9QUkVMT0FEPSRBU0FOX1JUNjQgXFwKK2V4ZWMgXCRACisKK0VPRgorZmkKKworZnVuY3Rpb24gaW5zdGFsbCB7ICMgZnJvbSwgdG8sIGNobW9kLCBjaGNvbgorICBsb2NhbCBfZnJvbT0kMQorICBsb2NhbCBfdG89JDIKKyAgbG9jYWwgX21vZGU9JDMKKyAgbG9jYWwgX2NvbnRleHQ9JDQKKyAgbG9jYWwgX2Jhc2VuYW1lPSIkKGJhc2VuYW1lICIkX2Zyb20iKSIKKyAgZWNobyAiSW5zdGFsbGluZyAkX3RvLyRfYmFzZW5hbWUgJF9tb2RlICRfY29udGV4dCIKKyAgYWRiX3B1c2ggIiRfZnJvbSIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgYWRiX3NoZWxsIGNob3duIHJvb3Quc2hlbGwgIiRfdG8vJF9iYXNlbmFtZSIKKyAgaWYgW1sgLW4gIiRfbW9kZSIgXV07IHRoZW4KKyAgICBhZGJfc2hlbGwgY2htb2QgIiRfbW9kZSIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgZmkKKyAgaWYgW1sgLW4gIiRfY29udGV4dCIgXV07IHRoZW4KKyAgICBhZGJfc2hlbGwgY2hjb24gIiRfY29udGV4dCIgIiRfdG8vJF9iYXNlbmFtZSIKKyAgZmkKK30KKworaWYgISAoIGNkICIkVE1QRElSQkFTRSIgJiYgZGlmZiAtcXIgb2xkLyBuZXcvICkgOyB0aGVuCisgICAgIyBNYWtlIFNFTGludXggaGFwcHkgYnkga2VlcGluZyBhcHBfcHJvY2VzcyB3cmFwcGVyIGFuZCB0aGUgc2hlbGwKKyAgICAjIGl0IHJ1bnMgb24gaW4genlnb3RlIGRvbWFpbi4KKyAgICBFTkZPUkNJTkc9MAorICAgIGlmIGFkYl9zaGVsbCBnZXRlbmZvcmNlIHwgZ3JlcCBFbmZvcmNpbmcgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIFNvbWV0aW1lcyBzaGVsbCBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UgZmlsZSBjb250ZXh0cy4KKyAgICAgICAgIyBUZW1wb3JhcmlseSBzd2l0Y2ggdG8gcGVybWlzc2l2ZS4KKyAgICAgICAgRU5GT1JDSU5HPTEKKyAgICAgICAgYWRiX3NoZWxsIHNldGVuZm9yY2UgMAorICAgIGZpCisKKyAgICBpZiBbWyBQUkVfTCAtZXEgMSBdXTsgdGhlbgorICAgICAgICBDVFg9dTpvYmplY3RfcjpzeXN0ZW1fZmlsZTpzMAorICAgIGVsc2UKKyAgICAgICAgQ1RYPXU6b2JqZWN0X3I6enlnb3RlX2V4ZWM6czAKKyAgICBmaQorCisgICAgZWNobyAnPj4gUHVzaGluZyBmaWxlcyB0byB0aGUgZGV2aWNlJworCisgICAgaWYgW1sgLW4gIiRBU0FOX1JUNjQiIF1dOyB0aGVuCisgICAgICBpbnN0YWxsICIkVE1QRElSLyRBU0FOX1JUIiAvc3lzdGVtL2xpYiA2NDQKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvJEFTQU5fUlQ2NCIgL3N5c3RlbS9saWI2NCA2NDQKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXBwX3Byb2Nlc3MzMiIgL3N5c3RlbS9iaW4gNzU1ICRDVFgKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXBwX3Byb2Nlc3MzMi5yZWFsIiAvc3lzdGVtL2JpbiA3NTUgJENUWAorICAgICAgaW5zdGFsbCAiJFRNUERJUi9hcHBfcHJvY2VzczY0IiAvc3lzdGVtL2JpbiA3NTUgJENUWAorICAgICAgaW5zdGFsbCAiJFRNUERJUi9hcHBfcHJvY2VzczY0LnJlYWwiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FzYW53cmFwcGVyIiAvc3lzdGVtL2JpbiA3NTUKKyAgICAgIGluc3RhbGwgIiRUTVBESVIvYXNhbndyYXBwZXI2NCIgL3N5c3RlbS9iaW4gNzU1CisgICAgZWxzZQorICAgICAgaW5zdGFsbCAiJFRNUERJUi8kQVNBTl9SVCIgL3N5c3RlbS9saWIgNjQ0CisgICAgICBpbnN0YWxsICIkVE1QRElSL2FwcF9wcm9jZXNzMzIiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FwcF9wcm9jZXNzLndyYXAiIC9zeXN0ZW0vYmluIDc1NSAkQ1RYCisgICAgICBpbnN0YWxsICIkVE1QRElSL2FzYW53cmFwcGVyIiAvc3lzdGVtL2JpbiA3NTUgJENUWAorCisgICAgICBhZGJfc2hlbGwgcm0gL3N5c3RlbS9iaW4vYXBwX3Byb2Nlc3MKKyAgICAgIGFkYl9zaGVsbCBsbiAtcyAvc3lzdGVtL2Jpbi9hcHBfcHJvY2Vzcy53cmFwIC9zeXN0ZW0vYmluL2FwcF9wcm9jZXNzCisgICAgZmkKKworICAgIGFkYl9zaGVsbCBjcCAvc3lzdGVtL2Jpbi9zaCAvc3lzdGVtL2Jpbi9zaC1mcm9tLXp5Z290ZQorICAgIGFkYl9zaGVsbCBjaGNvbiAkQ1RYIC9zeXN0ZW0vYmluL3NoLWZyb20tenlnb3RlCisKKyAgICBpZiBbICRFTkZPUkNJTkcgPT0gMSBdOyB0aGVuCisgICAgICAgIGFkYl9zaGVsbCBzZXRlbmZvcmNlIDEKKyAgICBmaQorCisgICAgZWNobyAnPj4gUmVzdGFydGluZyBzaGVsbCAoYXN5bmNocm9ub3VzKScKKyAgICBhZGJfc2hlbGwgc3RvcAorICAgIGFkYl9zaGVsbCBzdGFydAorCisgICAgZWNobyAnPj4gUGxlYXNlIHdhaXQgdW50aWwgdGhlIGRldmljZSByZXN0YXJ0cycKK2Vsc2UKKyAgICBlY2hvICc+PiBEZXZpY2UgaXMgdXAgdG8gZGF0ZScKK2ZpCisKK3JtIC1yICIkVE1QRElSQkFTRSIKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL2NsYW5nIGIvY2xhbmctMjY5MDM4NS9iaW4vY2xhbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDc1ZWIyYwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvYmluL2NsYW5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL2NsYW5nKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9jbGFuZysrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3NWViMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9jbGFuZysrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL2xsdm0tYXMgYi9jbGFuZy0yNjkwMzg1L2Jpbi9sbHZtLWFzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkZmNlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9sbHZtLWFzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL2xsdm0tZGlzIGIvY2xhbmctMjY5MDM4NS9iaW4vbGx2bS1kaXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDgzZGMxOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvYmluL2xsdm0tZGlzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL2xsdm0tbGluayBiL2NsYW5nLTI2OTAzODUvYmluL2xsdm0tbGluawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MjI2NTBmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9iaW4vbGx2bS1saW5rCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL21pcHMvYW5hbHl6ZXIgYi9jbGFuZy0yNjkwMzg1L2Jpbi9taXBzL2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxM2RiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9taXBzL2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IG1pcHNlbC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4vbWlwcy9hbmFseXplcisrIGIvY2xhbmctMjY5MDM4NS9iaW4vbWlwcy9hbmFseXplcisrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTU5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9taXBzL2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBtaXBzZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4vbWlwczY0L2FuYWx5emVyIGIvY2xhbmctMjY5MDM4NS9iaW4vbWlwczY0L2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMjc2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi9taXBzNjQvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgbWlwczY0ZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL21pcHM2NC9hbmFseXplcisrIGIvY2xhbmctMjY5MDM4NS9iaW4vbWlwczY0L2FuYWx5emVyKysKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA4ZGVlYgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvYmluL21pcHM2NC9hbmFseXplcisrCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZysrIC10YXJnZXQgbWlwczY0ZWwtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4veDg2L2FuYWx5emVyIGIvY2xhbmctMjY5MDM4NS9iaW4veDg2L2FuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmY2JmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi94ODYvYW5hbHl6ZXIKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nIC10YXJnZXQgaTY4Ni1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4veDg2L2FuYWx5emVyKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi94ODYvYW5hbHl6ZXIrKwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2E2MmRmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9iaW4veDg2L2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCBpNjg2LW5vbmUtbGludXgtYW5kcm9pZCAiJEAiCitlbHNlCisgICAgIyB0YXJnZXQvdHJpcGxlIGFscmVhZHkgc3BlbGxlZCBvdXQuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgIiRAIgorZmkKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvYmluL3g4Nl82NC9hbmFseXplciBiL2NsYW5nLTI2OTAzODUvYmluL3g4Nl82NC9hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2RiNDQzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9iaW4veDg2XzY0L2FuYWx5emVyCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL2Jhc2gKK2lmIFsgIiQxIiAhPSAiLWNjMSIgXTsgdGhlbgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAtdGFyZ2V0IHg4Nl82NC1ub25lLWxpbnV4LWFuZHJvaWQgIiRAIgorZWxzZQorICAgICMgdGFyZ2V0L3RyaXBsZSBhbHJlYWR5IHNwZWxsZWQgb3V0LgorICAgIGBkaXJuYW1lICQwYC8uLi9jbGFuZyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9iaW4veDg2XzY0L2FuYWx5emVyKysgYi9jbGFuZy0yNjkwMzg1L2Jpbi94ODZfNjQvYW5hbHl6ZXIrKwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDhkMTViCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9iaW4veDg2XzY0L2FuYWx5emVyKysKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vYmFzaAoraWYgWyAiJDEiICE9ICItY2MxIiBdOyB0aGVuCisgICAgYGRpcm5hbWUgJDBgLy4uL2NsYW5nKysgLXRhcmdldCB4ODZfNjQtbm9uZS1saW51eC1hbmRyb2lkICIkQCIKK2Vsc2UKKyAgICAjIHRhcmdldC90cmlwbGUgYWxyZWFkeSBzcGVsbGVkIG91dC4KKyAgICBgZGlybmFtZSAkMGAvLi4vY2xhbmcrKyAiJEAiCitmaQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9MTFZNZ29sZC5keWxpYiBiL2NsYW5nLTI2OTAzODUvbGliNjQvTExWTWdvbGQuZHlsaWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNjZGUyZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvTExWTWdvbGQuZHlsaWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjguMjU2MjI5IGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjguMjU2MjI5Cm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjk4ZmNjZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC4yNTYyMjkKQEAgLTAsMCArMSBAQAorMy44ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9JbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvSW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxZDBkMQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvSW50cmluLmgKQEAgLTAsMCArMSw5NTggQEAKKy8qID09PS0tLS0tLS0tIEludHJpbi5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyogT25seSBpbmNsdWRlIHRoaXMgaWYgd2UncmUgY29tcGlsaW5nIGZvciB0aGUgd2luZG93cyBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlX25leHQgPEludHJpbi5oPgorI2Vsc2UKKworI2lmbmRlZiBfX0lOVFJJTl9ICisjZGVmaW5lIF9fSU5UUklOX0gKKworLyogRmlyc3QgaW5jbHVkZSB0aGUgc3RhbmRhcmQgaW50cmluc2ljcy4gKi8KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaW5jbHVkZSA8eDg2aW50cmluLmg+CisjZW5kaWYKKworLyogRm9yIHRoZSBkZWZpbml0aW9uIG9mIGptcF9idWYuICovCisjaWYgX19TVERDX0hPU1RFRF9fCisjaW5jbHVkZSA8c2V0am1wLmg+CisjZW5kaWYKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01NWF9fKQorLyogQW5kIHRoZSByYW5kb20gb25lcyB0aGF0IGFyZW4ndCBpbiB0aG9zZSBmaWxlcy4gKi8KK19fbTY0IF9tX2Zyb21fZmxvYXQoZmxvYXQpOworZmxvYXQgX21fdG9fZmxvYXQoX19tNjQpOworI2VuZGlmCisKKy8qIE90aGVyIGFzc29ydGVkIGluc3RydWN0aW9uIGludHJpbnNpY3MuICovCit2b2lkIF9fYWRkZnNieXRlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIpOwordm9pZCBfX2FkZGZzZHdvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9fYWRkZnN3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIHNob3J0KTsKK3ZvaWQgX19jb2RlX3NlZyhjb25zdCBjaGFyICopOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19jcHVpZChpbnRbNF0sIGludCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX2NwdWlkZXgoaW50WzRdLCBpbnQsIGludCk7Cit2b2lkIF9fZGVidWdicmVhayh2b2lkKTsKK19faW50NjQgX19lbXVsKGludCwgaW50KTsKK3Vuc2lnbmVkIF9faW50NjQgX19lbXVsdSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit2b2lkIF9fY2RlY2wgX19mYXN0ZmFpbCh1bnNpZ25lZCBpbnQpOwordW5zaWduZWQgaW50IF9fZ2V0Y2FsbGVyc2VmbGFncyh2b2lkKTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9faGFsdCh2b2lkKTsKK3Vuc2lnbmVkIGNoYXIgX19pbmJ5dGUodW5zaWduZWQgc2hvcnQpOwordm9pZCBfX2luYnl0ZXN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19pbmNmc2J5dGUodW5zaWduZWQgbG9uZyk7Cit2b2lkIF9faW5jZnNkd29yZCh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19pbmNmc3dvcmQodW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBsb25nIF9faW5kd29yZCh1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9faW5kd29yZHN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19pbnQyYyh2b2lkKTsKK3ZvaWQgX19pbnZscGcodm9pZCAqKTsKK3Vuc2lnbmVkIHNob3J0IF9faW53b3JkKHVuc2lnbmVkIHNob3J0KTsKK3ZvaWQgX19pbndvcmRzdHJpbmcodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2xpZHQodm9pZCAqKTsKK3Vuc2lnbmVkIF9faW50NjQgX19sbF9sc2hpZnQodW5zaWduZWQgX19pbnQ2NCwgaW50KTsKK19faW50NjQgX19sbF9yc2hpZnQoX19pbnQ2NCwgaW50KTsKK3ZvaWQgX19sbHdwY2Iodm9pZCAqKTsKK3Vuc2lnbmVkIGNoYXIgX19sd3BpbnMzMih1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3ZvaWQgX19sd3B2YWwzMih1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3Vuc2lnbmVkIGludCBfX2x6Y250KHVuc2lnbmVkIGludCk7Cit1bnNpZ25lZCBzaG9ydCBfX2x6Y250MTYodW5zaWduZWQgc2hvcnQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19tb3ZzYih1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgY29uc3QgKiwgc2l6ZV90KTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fbW92c2QodW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nIGNvbnN0ICosIHNpemVfdCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX21vdnN3KHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIHNob3J0IGNvbnN0ICosIHNpemVfdCk7Cit2b2lkIF9fbm9wKHZvaWQpOwordm9pZCBfX252cmVnX3Jlc3RvcmVfZmVuY2Uodm9pZCk7Cit2b2lkIF9fbnZyZWdfc2F2ZV9mZW5jZSh2b2lkKTsKK3ZvaWQgX19vdXRieXRlKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBjaGFyKTsKK3ZvaWQgX19vdXRieXRlc3RyaW5nKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX291dGR3b3JkKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19vdXRkd29yZHN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19vdXR3b3JkKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9fb3V0d29yZHN0cmluZyh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgaW50IF9fcG9wY250KHVuc2lnbmVkIGludCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgc2hvcnQgX19wb3BjbnQxNih1bnNpZ25lZCBzaG9ydCk7Cit1bnNpZ25lZCBsb25nIF9fcmVhZGNyMCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgX19yZWFkY3IyKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGxvbmcgX19yZWFkY3IzKHZvaWQpOwordW5zaWduZWQgbG9uZyBfX3JlYWRjcjQodm9pZCk7Cit1bnNpZ25lZCBsb25nIF9fcmVhZGNyOCh2b2lkKTsKK3Vuc2lnbmVkIGludCBfX3JlYWRkcih1bnNpZ25lZCBpbnQpOworI2lmZGVmIF9faTM4Nl9fCitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfX3JlYWRmc2J5dGUodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgbG9uZyBfX3JlYWRmc2R3b3JkKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9faW50NjQgX19yZWFkZnNxd29yZCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBzaG9ydCBfX3JlYWRmc3dvcmQodW5zaWduZWQgbG9uZyk7CisjZW5kaWYKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBfX2ludDY0IF9fcmVhZG1zcih1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIF9faW50NjQgX19yZWFkcG1jKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgbG9uZyBfX3NlZ21lbnRsaW1pdCh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19zaWR0KHZvaWQgKik7Cit2b2lkICpfX3Nsd3BjYih2b2lkKTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fc3Rvc2IodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyLCBzaXplX3QpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19zdG9zZCh1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX3N0b3N3KHVuc2lnbmVkIHNob3J0ICosIHVuc2lnbmVkIHNob3J0LCBzaXplX3QpOwordm9pZCBfX3N2bV9jbGdpKHZvaWQpOwordm9pZCBfX3N2bV9pbnZscGdhKHZvaWQgKiwgaW50KTsKK3ZvaWQgX19zdm1fc2tpbml0KGludCk7Cit2b2lkIF9fc3ZtX3N0Z2kodm9pZCk7Cit2b2lkIF9fc3ZtX3ZtbG9hZChzaXplX3QpOwordm9pZCBfX3N2bV92bXJ1bihzaXplX3QpOwordm9pZCBfX3N2bV92bXNhdmUoc2l6ZV90KTsKK3ZvaWQgX191ZDIodm9pZCk7Cit1bnNpZ25lZCBfX2ludDY0IF9fdWxsX3JzaGlmdCh1bnNpZ25lZCBfX2ludDY0LCBpbnQpOwordm9pZCBfX3ZteF9vZmYodm9pZCk7Cit2b2lkIF9fdm14X3ZtcHRyc3QodW5zaWduZWQgX19pbnQ2NCAqKTsKK3ZvaWQgX193YmludmQodm9pZCk7Cit2b2lkIF9fd3JpdGVjcjAodW5zaWduZWQgaW50KTsKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9fd3JpdGVjcjModW5zaWduZWQgaW50KTsKK3ZvaWQgX193cml0ZWNyNCh1bnNpZ25lZCBpbnQpOwordm9pZCBfX3dyaXRlY3I4KHVuc2lnbmVkIGludCk7Cit2b2lkIF9fd3JpdGVkcih1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit2b2lkIF9fd3JpdGVmc2J5dGUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7Cit2b2lkIF9fd3JpdGVmc2R3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX3dyaXRlZnNxd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBfX2ludDY0KTsKK3ZvaWQgX193cml0ZWZzd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9fd3JpdGVtc3IodW5zaWduZWQgbG9uZywgdW5zaWduZWQgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCAqX0FkZHJlc3NPZlJldHVybkFkZHJlc3Modm9pZCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfQml0U2NhbkZvcndhcmQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBsb25nIF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9CaXRTY2FuUmV2ZXJzZSh1bnNpZ25lZCBsb25nICpfSW5kZXgsIHVuc2lnbmVkIGxvbmcgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2JpdHRlc3QobG9uZyBjb25zdCAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kY29tcGxlbWVudChsb25nICosIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2JpdHRlc3RhbmRyZXNldChsb25nICosIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2JpdHRlc3RhbmRzZXQobG9uZyAqLCBsb25nKTsKK3Vuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfYnl0ZXN3YXBfdWludDY0KHVuc2lnbmVkIF9faW50NjQpOwordW5zaWduZWQgbG9uZyBfX2NkZWNsIF9ieXRlc3dhcF91bG9uZyh1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIHNob3J0IF9fY2RlY2wgX2J5dGVzd2FwX3VzaG9ydCh1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIF9fY2RlY2wgX2Rpc2FibGUodm9pZCk7Cit2b2lkIF9fY2RlY2wgX2VuYWJsZSh2b2lkKTsKK2xvbmcgX0ludGVybG9ja2VkQWRkTGFyZ2VTdGF0aXN0aWMoX19pbnQ2NCB2b2xhdGlsZSAqX0FkZGVuZCwgbG9uZyBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK2xvbmcgX0ludGVybG9ja2VkQW5kKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzayk7CitzdGF0aWMgX19pbmxpbmVfXworc2hvcnQgX0ludGVybG9ja2VkQW5kMTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK2NoYXIgX0ludGVybG9ja2VkQW5kOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOwordW5zaWduZWQgY2hhciBfaW50ZXJsb2NrZWRiaXR0ZXN0YW5kcmVzZXQobG9uZyB2b2xhdGlsZSAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9pbnRlcmxvY2tlZGJpdHRlc3RhbmRzZXQobG9uZyB2b2xhdGlsZSAqLCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCitsb25nIF9fY2RlY2wgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKGxvbmcgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfRXhjaGFuZ2UsIGxvbmcgX0NvbXBhcmFuZCk7Citsb25nIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9ITEVBY3F1aXJlKGxvbmcgdm9sYXRpbGUgKiwgbG9uZywgbG9uZyk7Citsb25nIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9ITEVSZWxlYXNlKGxvbmcgdm9sYXRpbGUgKiwgbG9uZywgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXworc2hvcnQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTYoc2hvcnQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9FeGNoYW5nZSwgc2hvcnQgX0NvbXBhcmFuZCk7CitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NChfX2ludDY0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlLCBfX2ludDY0IF9Db21wYXJhbmQpOworX19pbnQ2NCBfSW50ZXJsb2NrZWRjb21wYXJlRXhjaGFuZ2U2NF9ITEVBY3F1aXJlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0KTsKK19faW50NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjRfSExFUmVsZWFzZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXworY2hhciBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U4KGNoYXIgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwgY2hhciBfRXhjaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfQ29tcGFyYW5kKTsKK3ZvaWQgKl9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXJfSExFQWNxdWlyZSh2b2lkICp2b2xhdGlsZSAqLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsKK3ZvaWQgKl9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXJfSExFUmVsZWFzZSh2b2lkICp2b2xhdGlsZSAqLCB2b2lkICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsKK3N0YXRpYyBfX2lubGluZV9fCitsb25nIF9fY2RlY2wgX0ludGVybG9ja2VkRGVjcmVtZW50KGxvbmcgdm9sYXRpbGUgKl9BZGRlbmQpOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZERlY3JlbWVudDE2KHNob3J0IHZvbGF0aWxlICpfQWRkZW5kKTsKK2xvbmcgX0ludGVybG9ja2VkRXhjaGFuZ2UobG9uZyB2b2xhdGlsZSAqX1RhcmdldCwgbG9uZyBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlMTYoc2hvcnQgdm9sYXRpbGUgKl9UYXJnZXQsIHNob3J0IF9WYWx1ZSk7CitzdGF0aWMgX19pbmxpbmVfXworY2hhciBfSW50ZXJsb2NrZWRFeGNoYW5nZTgoY2hhciB2b2xhdGlsZSAqX1RhcmdldCwgY2hhciBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK2xvbmcgX19jZGVjbCBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZChsb25nIHZvbGF0aWxlICpfQWRkZW5kLCBsb25nIF9WYWx1ZSk7Citsb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkX0hMRUFjcXVpcmUobG9uZyB2b2xhdGlsZSAqLCBsb25nKTsKK2xvbmcgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGRfSExFUmVsZWFzZShsb25nIHZvbGF0aWxlICosIGxvbmcpOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkMTYoc2hvcnQgdm9sYXRpbGUgKl9BZGRlbmQsIHNob3J0IF9WYWx1ZSk7CitfX2ludDY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkNjRfSExFQWNxdWlyZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQpOworX19pbnQ2NCBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0X0hMRVJlbGVhc2UoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCitjaGFyIF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkOChjaGFyIHZvbGF0aWxlICpfQWRkZW5kLCBjaGFyIF9WYWx1ZSk7CitzdGF0aWMgX19pbmxpbmVfXworbG9uZyBfX2NkZWNsIF9JbnRlcmxvY2tlZEluY3JlbWVudChsb25nIHZvbGF0aWxlICpfQWRkZW5kKTsKK3N0YXRpYyBfX2lubGluZV9fCitzaG9ydCBfSW50ZXJsb2NrZWRJbmNyZW1lbnQxNihzaG9ydCB2b2xhdGlsZSAqX0FkZGVuZCk7CitzdGF0aWMgX19pbmxpbmVfXworbG9uZyBfSW50ZXJsb2NrZWRPcihsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK3Nob3J0IF9JbnRlcmxvY2tlZE9yMTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK2NoYXIgX0ludGVybG9ja2VkT3I4KGNoYXIgdm9sYXRpbGUgKl9WYWx1ZSwgY2hhciBfTWFzayk7CitzdGF0aWMgX19pbmxpbmVfXworbG9uZyBfSW50ZXJsb2NrZWRYb3IobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitzaG9ydCBfSW50ZXJsb2NrZWRYb3IxNihzaG9ydCB2b2xhdGlsZSAqX1ZhbHVlLCBzaG9ydCBfTWFzayk7CitzdGF0aWMgX19pbmxpbmVfXworY2hhciBfSW50ZXJsb2NrZWRYb3I4KGNoYXIgdm9sYXRpbGUgKl9WYWx1ZSwgY2hhciBfTWFzayk7Cit2b2lkIF9fY2RlY2wgX2ludnBjaWQodW5zaWduZWQgaW50LCB2b2lkICopOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGxvbmcgX19jZGVjbCBfbHJvdGwodW5zaWduZWQgbG9uZywgaW50KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBsb25nIF9fY2RlY2wgX2xyb3RyKHVuc2lnbmVkIGxvbmcsIGludCk7CitzdGF0aWMgX19pbmxpbmVfXworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX1JlYWRCYXJyaWVyKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX1JlYWRXcml0ZUJhcnJpZXIodm9pZCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCAqX1JldHVybkFkZHJlc3Modm9pZCk7Cit1bnNpZ25lZCBpbnQgX3JvcnhfdTMyKHVuc2lnbmVkIGludCwgY29uc3QgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBpbnQgX19jZGVjbCBfcm90bCh1bnNpZ25lZCBpbnQgX1ZhbHVlLCBpbnQgX1NoaWZ0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBzaG9ydCBfcm90bDE2KHVuc2lnbmVkIHNob3J0IF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfcm90bDY0KHVuc2lnbmVkIF9faW50NjQgX1ZhbHVlLCBpbnQgX1NoaWZ0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9yb3RsOCh1bnNpZ25lZCBjaGFyIF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGludCBfX2NkZWNsIF9yb3RyKHVuc2lnbmVkIGludCBfVmFsdWUsIGludCBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIHNob3J0IF9yb3RyMTYodW5zaWduZWQgc2hvcnQgX1ZhbHVlLCB1bnNpZ25lZCBjaGFyIF9TaGlmdCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX2NkZWNsIF9yb3RyNjQodW5zaWduZWQgX19pbnQ2NCBfVmFsdWUsIGludCBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX3JvdHI4KHVuc2lnbmVkIGNoYXIgX1ZhbHVlLCB1bnNpZ25lZCBjaGFyIF9TaGlmdCk7CitpbnQgX3NhcnhfaTMyKGludCwgdW5zaWduZWQgaW50KTsKKyNpZiBfX1NURENfSE9TVEVEX18KK2ludCBfX2NkZWNsIF9zZXRqbXAoam1wX2J1Zik7CisjZW5kaWYKK3Vuc2lnbmVkIGludCBfc2hseF91MzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordW5zaWduZWQgaW50IF9zaHJ4X3UzMih1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit2b2lkIF9TdG9yZV9ITEVSZWxlYXNlKGxvbmcgdm9sYXRpbGUgKiwgbG9uZyk7Cit2b2lkIF9TdG9yZTY0X0hMRVJlbGVhc2UoX19pbnQ2NCB2b2xhdGlsZSAqLCBfX2ludDY0KTsKK3ZvaWQgX1N0b3JlUG9pbnRlcl9ITEVSZWxlYXNlKHZvaWQgKnZvbGF0aWxlICosIHZvaWQgKik7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfV3JpdGVCYXJyaWVyKHZvaWQpOwordW5zaWduZWQgX19pbnQzMiB4YmVnaW4odm9pZCk7Cit2b2lkIF94ZW5kKHZvaWQpOworc3RhdGljIF9faW5saW5lX18KKyNkZWZpbmUgX1hDUl9YRkVBVFVSRV9FTkFCTEVEX01BU0sgMAordW5zaWduZWQgX19pbnQ2NCBfX2NkZWNsIF94Z2V0YnYodW5zaWduZWQgaW50KTsKK3ZvaWQgX19jZGVjbCBfeHNldGJ2KHVuc2lnbmVkIGludCwgdW5zaWduZWQgX19pbnQ2NCk7CisKKy8qIFRoZXNlIGFkZGl0aW9uYWwgaW50cmluc2ljcyBhcmUgdHVybmVkIG9uIGluIHg2NC9hbWQ2NC94ODZfNjQgbW9kZS4gKi8KKyNpZmRlZiBfX3g4Nl82NF9fCit2b2lkIF9fYWRkZ3NieXRlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIpOwordm9pZCBfX2FkZGdzZHdvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit2b2lkIF9fYWRkZ3Nxd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBfX2ludDY0KTsKK3ZvaWQgX19hZGRnc3dvcmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgc2hvcnQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19mYXN0c3RvcmVmZW5jZSh2b2lkKTsKK3ZvaWQgX19pbmNnc2J5dGUodW5zaWduZWQgbG9uZyk7Cit2b2lkIF9faW5jZ3Nkd29yZCh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX19pbmNnc3F3b3JkKHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX2luY2dzd29yZCh1bnNpZ25lZCBsb25nKTsKK3Vuc2lnbmVkIGNoYXIgX19sd3BpbnM2NCh1bnNpZ25lZCBfX2ludDY0LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7Cit2b2lkIF9fbHdwdmFsNjQodW5zaWduZWQgX19pbnQ2NCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwordW5zaWduZWQgX19pbnQ2NCBfX2x6Y250NjQodW5zaWduZWQgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXwordm9pZCBfX21vdnNxKHVuc2lnbmVkIGxvbmcgbG9uZyAqLCB1bnNpZ25lZCBsb25nIGxvbmcgY29uc3QgKiwgc2l6ZV90KTsKK19faW50NjQgX19tdWxoKF9faW50NjQsIF9faW50NjQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIF9faW50NjQgX19wb3BjbnQ2NCh1bnNpZ25lZCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9fcmVhZGdzYnl0ZSh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBsb25nIF9fcmVhZGdzZHdvcmQodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX3JlYWRnc3F3b3JkKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgc2hvcnQgX19yZWFkZ3N3b3JkKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgX19pbnQ2NCBfX3NoaWZ0bGVmdDEyOCh1bnNpZ25lZCBfX2ludDY0IF9Mb3dQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX2ludDY0IF9IaWdoUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfU2hpZnQpOwordW5zaWduZWQgX19pbnQ2NCBfX3NoaWZ0cmlnaHQxMjgodW5zaWduZWQgX19pbnQ2NCBfTG93UGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9faW50NjQgX0hpZ2hQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfU2hpZnQpOworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX19zdG9zcSh1bnNpZ25lZCBfX2ludDY0ICosIHVuc2lnbmVkIF9faW50NjQsIHNpemVfdCk7Cit1bnNpZ25lZCBjaGFyIF9fdm14X29uKHVuc2lnbmVkIF9faW50NjQgKik7Cit1bnNpZ25lZCBjaGFyIF9fdm14X3ZtY2xlYXIodW5zaWduZWQgX19pbnQ2NCAqKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm1sYXVuY2godm9pZCk7Cit1bnNpZ25lZCBjaGFyIF9fdm14X3ZtcHRybGQodW5zaWduZWQgX19pbnQ2NCAqKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm1yZWFkKHNpemVfdCwgc2l6ZV90ICopOwordW5zaWduZWQgY2hhciBfX3ZteF92bXJlc3VtZSh2b2lkKTsKK3Vuc2lnbmVkIGNoYXIgX192bXhfdm13cml0ZShzaXplX3QsIHNpemVfdCk7Cit2b2lkIF9fd3JpdGVnc2J5dGUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7Cit2b2lkIF9fd3JpdGVnc2R3b3JkKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwordm9pZCBfX3dyaXRlZ3Nxd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBfX2ludDY0KTsKK3ZvaWQgX193cml0ZWdzd29yZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfQml0U2NhbkZvcndhcmQ2NCh1bnNpZ25lZCBsb25nICpfSW5kZXgsIHVuc2lnbmVkIF9faW50NjQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5SZXZlcnNlNjQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBfX2ludDY0IF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0NjQoX19pbnQ2NCBjb25zdCAqLCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kY29tcGxlbWVudDY0KF9faW50NjQgKiwgX19pbnQ2NCk7CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgY2hhciBfYml0dGVzdGFuZHJlc2V0NjQoX19pbnQ2NCAqLCBfX2ludDY0KTsKK3N0YXRpYyBfX2lubGluZV9fCit1bnNpZ25lZCBjaGFyIF9iaXR0ZXN0YW5kc2V0NjQoX19pbnQ2NCAqLCBfX2ludDY0KTsKK3Vuc2lnbmVkIF9faW50NjQgX19jZGVjbCBfYnl0ZXN3YXBfdWludDY0KHVuc2lnbmVkIF9faW50NjQpOworbG9uZyBfSW50ZXJsb2NrZWRBbmRfbnAobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3Nob3J0IF9JbnRlcmxvY2tlZEFuZDE2X25wKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKK19faW50NjQgX0ludGVybG9ja2VkQW5kNjRfbnAoX19pbnQ2NCB2b2xhdGlsZSAqX1ZhbHVlLCBfX2ludDY0IF9NYXNrKTsKK2NoYXIgX0ludGVybG9ja2VkQW5kOF9ucChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOwordW5zaWduZWQgY2hhciBfaW50ZXJsb2NrZWRiaXR0ZXN0YW5kcmVzZXQ2NChfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQpOworc3RhdGljIF9faW5saW5lX18KK3Vuc2lnbmVkIGNoYXIgX2ludGVybG9ja2VkYml0dGVzdGFuZHNldDY0KF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCk7Citsb25nIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZV9ucChsb25nIHZvbGF0aWxlICpfRGVzdGluYXRpb24sIGxvbmcgX0V4Y2hhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfQ29tcGFyYW5kKTsKK3Vuc2lnbmVkIGNoYXIgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlMTI4KF9faW50NjQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlSGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW50NjQgX0V4Y2hhbmdlTG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCAqX0NvbXBhcmVhbmRSZXN1bHQpOwordW5zaWduZWQgY2hhciBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxMjhfbnAoX19pbnQ2NCB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2VIaWdoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2VMb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0ICpfQ29tcGFyYW5kUmVzdWx0KTsKK3Nob3J0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2X25wKHNob3J0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfRXhjaGFuZ2UsIHNob3J0IF9Db21wYXJhbmQpOworX19pbnQ2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NF9ITEVBY3F1aXJlKF9faW50NjQgdm9sYXRpbGUgKiwgX19pbnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0KTsKK19faW50NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjRfSExFUmVsZWFzZShfX2ludDY0IHZvbGF0aWxlICosIF9faW50NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCk7CitfX2ludDY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9EZXN0aW5hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbnQ2NCBfRXhjaGFuZ2UsIF9faW50NjQgX0NvbXBhcmFuZCk7Cit2b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyKHZvaWQgKnZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9FeGNoYW5nZSwgdm9pZCAqX0NvbXBhcmFuZCk7Cit2b2lkICpfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyX25wKHZvaWQgKnZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9FeGNoYW5nZSwgdm9pZCAqX0NvbXBhcmFuZCk7CitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfSW50ZXJsb2NrZWREZWNyZW1lbnQ2NChfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlNjQoX19pbnQ2NCB2b2xhdGlsZSAqX1RhcmdldCwgX19pbnQ2NCBfVmFsdWUpOworc3RhdGljIF9faW5saW5lX18KK19faW50NjQgX0ludGVybG9ja2VkRXhjaGFuZ2VBZGQ2NChfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kLCBfX2ludDY0IF9WYWx1ZSk7Cit2b2lkICpfSW50ZXJsb2NrZWRFeGNoYW5nZVBvaW50ZXIodm9pZCAqdm9sYXRpbGUgKl9UYXJnZXQsIHZvaWQgKl9WYWx1ZSk7CitzdGF0aWMgX19pbmxpbmVfXworX19pbnQ2NCBfSW50ZXJsb2NrZWRJbmNyZW1lbnQ2NChfX2ludDY0IHZvbGF0aWxlICpfQWRkZW5kKTsKK2xvbmcgX0ludGVybG9ja2VkT3JfbnAobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3Nob3J0IF9JbnRlcmxvY2tlZE9yMTZfbnAoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spOworc3RhdGljIF9faW5saW5lX18KK19faW50NjQgX0ludGVybG9ja2VkT3I2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spOworX19pbnQ2NCBfSW50ZXJsb2NrZWRPcjY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7CitjaGFyIF9JbnRlcmxvY2tlZE9yOF9ucChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spOworbG9uZyBfSW50ZXJsb2NrZWRYb3JfbnAobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKTsKK3Nob3J0IF9JbnRlcmxvY2tlZFhvcjE2X25wKHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9JbnRlcmxvY2tlZFhvcjY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7CitfX2ludDY0IF9JbnRlcmxvY2tlZFhvcjY0X25wKF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzayk7CitjaGFyIF9JbnRlcmxvY2tlZFhvcjhfbnAoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKTsKK3N0YXRpYyBfX2lubGluZV9fCitfX2ludDY0IF9tdWwxMjgoX19pbnQ2NCBfTXVsdGlwbGllciwgX19pbnQ2NCBfTXVsdGlwbGljYW5kLAorICAgICAgICAgICAgICAgIF9faW50NjQgKl9IaWdoUHJvZHVjdCk7Cit1bnNpZ25lZCBfX2ludDY0IF9yb3J4X3U2NCh1bnNpZ25lZCBfX2ludDY0LCBjb25zdCB1bnNpZ25lZCBpbnQpOworX19pbnQ2NCBfc2FyeF9pNjQoX19pbnQ2NCwgdW5zaWduZWQgaW50KTsKKyNpZiBfX1NURENfSE9TVEVEX18KK2ludCBfX2NkZWNsIF9zZXRqbXBleChqbXBfYnVmKTsKKyNlbmRpZgordW5zaWduZWQgX19pbnQ2NCBfc2hseF91NjQodW5zaWduZWQgX19pbnQ2NCwgdW5zaWduZWQgaW50KTsKK3Vuc2lnbmVkIF9faW50NjQgX3NocnhfdTY0KHVuc2lnbmVkIF9faW50NjQsIHVuc2lnbmVkIGludCk7CisvKgorICogTXVsdGlwbHkgdHdvIDY0LWJpdCBpbnRlZ2VycyBhbmQgb2J0YWluIGEgNjQtYml0IHJlc3VsdC4KKyAqIFRoZSBsb3ctaGFsZiBpcyByZXR1cm5lZCBkaXJlY3RseSBhbmQgdGhlIGhpZ2ggaGFsZiBpcyBpbiBhbiBvdXQgcGFyYW1ldGVyLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX3VtdWwxMjgodW5zaWduZWQgX19pbnQ2NCBfTXVsdGlwbGllciwgdW5zaWduZWQgX19pbnQ2NCBfTXVsdGlwbGljYW5kLAorICAgICAgICAgdW5zaWduZWQgX19pbnQ2NCAqX0hpZ2hQcm9kdWN0KSB7CisgIHVuc2lnbmVkIF9faW50MTI4IF9GdWxsUHJvZHVjdCA9CisgICAgICAodW5zaWduZWQgX19pbnQxMjgpX011bHRpcGxpZXIgKiAodW5zaWduZWQgX19pbnQxMjgpX011bHRpcGxpY2FuZDsKKyAgKl9IaWdoUHJvZHVjdCA9IF9GdWxsUHJvZHVjdCA+PiA2NDsKKyAgcmV0dXJuIF9GdWxsUHJvZHVjdDsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3VtdWxoKHVuc2lnbmVkIF9faW50NjQgX011bHRpcGxpZXIsIHVuc2lnbmVkIF9faW50NjQgX011bHRpcGxpY2FuZCkgeworICB1bnNpZ25lZCBfX2ludDEyOCBfRnVsbFByb2R1Y3QgPQorICAgICAgKHVuc2lnbmVkIF9faW50MTI4KV9NdWx0aXBsaWVyICogKHVuc2lnbmVkIF9faW50MTI4KV9NdWx0aXBsaWNhbmQ7CisgIHJldHVybiBfRnVsbFByb2R1Y3QgPj4gNjQ7Cit9CisKKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBNdWx0aXBsaWNhdGlvbgorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2VtdWwoaW50IF9faW4xLCBpbnQgX19pbjIpIHsKKyAgcmV0dXJuIChfX2ludDY0KV9faW4xICogKF9faW50NjQpX19pbjI7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX19lbXVsdSh1bnNpZ25lZCBpbnQgX19pbjEsIHVuc2lnbmVkIGludCBfX2luMikgeworICByZXR1cm4gKHVuc2lnbmVkIF9faW50NjQpX19pbjEgKiAodW5zaWduZWQgX19pbnQ2NClfX2luMjsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBCaXQgVHdpZGRsaW5nCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19yb3RsOCh1bnNpZ25lZCBjaGFyIF9WYWx1ZSwgdW5zaWduZWQgY2hhciBfU2hpZnQpIHsKKyAgX1NoaWZ0ICY9IDB4NzsKKyAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPDwgX1NoaWZ0KSB8IChfVmFsdWUgPj4gKDggLSBfU2hpZnQpKSA6IF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfcm90cjgodW5zaWduZWQgY2hhciBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KSB7CisgIF9TaGlmdCAmPSAweDc7CisgIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlID4+IF9TaGlmdCkgfCAoX1ZhbHVlIDw8ICg4IC0gX1NoaWZ0KSkgOiBfVmFsdWU7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19yb3RsMTYodW5zaWduZWQgc2hvcnQgX1ZhbHVlLCB1bnNpZ25lZCBjaGFyIF9TaGlmdCkgeworICBfU2hpZnQgJj0gMHhmOworICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA8PCBfU2hpZnQpIHwgKF9WYWx1ZSA+PiAoMTYgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX3JvdHIxNih1bnNpZ25lZCBzaG9ydCBfVmFsdWUsIHVuc2lnbmVkIGNoYXIgX1NoaWZ0KSB7CisgIF9TaGlmdCAmPSAweGY7CisgIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlID4+IF9TaGlmdCkgfCAoX1ZhbHVlIDw8ICgxNiAtIF9TaGlmdCkpIDogX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX3JvdGwodW5zaWduZWQgaW50IF9WYWx1ZSwgaW50IF9TaGlmdCkgeworICBfU2hpZnQgJj0gMHgxZjsKKyAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPDwgX1NoaWZ0KSB8IChfVmFsdWUgPj4gKDMyIC0gX1NoaWZ0KSkgOiBfVmFsdWU7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcm90cih1bnNpZ25lZCBpbnQgX1ZhbHVlLCBpbnQgX1NoaWZ0KSB7CisgIF9TaGlmdCAmPSAweDFmOworICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA+PiBfU2hpZnQpIHwgKF9WYWx1ZSA8PCAoMzIgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbHJvdGwodW5zaWduZWQgbG9uZyBfVmFsdWUsIGludCBfU2hpZnQpIHsKKyAgX1NoaWZ0ICY9IDB4MWY7CisgIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlIDw8IF9TaGlmdCkgfCAoX1ZhbHVlID4+ICgzMiAtIF9TaGlmdCkpIDogX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19scm90cih1bnNpZ25lZCBsb25nIF9WYWx1ZSwgaW50IF9TaGlmdCkgeworICBfU2hpZnQgJj0gMHgxZjsKKyAgcmV0dXJuIF9TaGlmdCA/IChfVmFsdWUgPj4gX1NoaWZ0KSB8IChfVmFsdWUgPDwgKDMyIC0gX1NoaWZ0KSkgOiBfVmFsdWU7Cit9CitzdGF0aWMKK19faW5saW5lX18gdW5zaWduZWQgX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19yb3RsNjQodW5zaWduZWQgX19pbnQ2NCBfVmFsdWUsIGludCBfU2hpZnQpIHsKKyAgX1NoaWZ0ICY9IDB4M2Y7CisgIHJldHVybiBfU2hpZnQgPyAoX1ZhbHVlIDw8IF9TaGlmdCkgfCAoX1ZhbHVlID4+ICg2NCAtIF9TaGlmdCkpIDogX1ZhbHVlOworfQorc3RhdGljCitfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcm90cjY0KHVuc2lnbmVkIF9faW50NjQgX1ZhbHVlLCBpbnQgX1NoaWZ0KSB7CisgIF9TaGlmdCAmPSAweDNmOworICByZXR1cm4gX1NoaWZ0ID8gKF9WYWx1ZSA+PiBfU2hpZnQpIHwgKF9WYWx1ZSA8PCAoNjQgLSBfU2hpZnQpKSA6IF9WYWx1ZTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBCaXQgQ291bnRpbmcgYW5kIFRlc3RpbmcKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKl9JbmRleCwgdW5zaWduZWQgbG9uZyBfTWFzaykgeworICBpZiAoIV9NYXNrKQorICAgIHJldHVybiAwOworICAqX0luZGV4ID0gX19idWlsdGluX2N0emwoX01hc2spOworICByZXR1cm4gMTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBsb25nIF9NYXNrKSB7CisgIGlmICghX01hc2spCisgICAgcmV0dXJuIDA7CisgICpfSW5kZXggPSAzMSAtIF9fYnVpbHRpbl9jbHpsKF9NYXNrKTsKKyAgcmV0dXJuIDE7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcG9wY250MTYodW5zaWduZWQgc2hvcnQgX1ZhbHVlKSB7CisgIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQoKGludClfVmFsdWUpOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19wb3BjbnQodW5zaWduZWQgaW50IF9WYWx1ZSkgeworICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KF9WYWx1ZSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3QobG9uZyBjb25zdCAqX0JpdEJhc2UsIGxvbmcgX0JpdFBvcykgeworICByZXR1cm4gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3RhbmRjb21wbGVtZW50KGxvbmcgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgdW5zaWduZWQgY2hhciBfUmVzID0gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7CisgICpfQml0QmFzZSA9ICpfQml0QmFzZSBeICgxIDw8IF9CaXRQb3MpOworICByZXR1cm4gX1JlczsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYml0dGVzdGFuZHJlc2V0KGxvbmcgKl9CaXRCYXNlLCBsb25nIF9CaXRQb3MpIHsKKyAgdW5zaWduZWQgY2hhciBfUmVzID0gKCpfQml0QmFzZSA+PiBfQml0UG9zKSAmIDE7CisgICpfQml0QmFzZSA9ICpfQml0QmFzZSAmIH4oMSA8PCBfQml0UG9zKTsKKyAgcmV0dXJuIF9SZXM7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3RhbmRzZXQobG9uZyAqX0JpdEJhc2UsIGxvbmcgX0JpdFBvcykgeworICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKKyAgKl9CaXRCYXNlID0gKl9CaXRCYXNlIHwgKDEgPDwgX0JpdFBvcyk7CisgIHJldHVybiBfUmVzOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19pbnRlcmxvY2tlZGJpdHRlc3RhbmRzZXQobG9uZyB2b2xhdGlsZSAqX0JpdEJhc2UsIGxvbmcgX0JpdFBvcykgeworICBsb25nIF9QcmV2VmFsID0gX19hdG9taWNfZmV0Y2hfb3IoX0JpdEJhc2UsIDFsIDw8IF9CaXRQb3MsIF9fQVRPTUlDX1NFUV9DU1QpOworICByZXR1cm4gKF9QcmV2VmFsID4+IF9CaXRQb3MpICYgMTsKK30KKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0JpdFNjYW5Gb3J3YXJkNjQodW5zaWduZWQgbG9uZyAqX0luZGV4LCB1bnNpZ25lZCBfX2ludDY0IF9NYXNrKSB7CisgIGlmICghX01hc2spCisgICAgcmV0dXJuIDA7CisgICpfSW5kZXggPSBfX2J1aWx0aW5fY3R6bGwoX01hc2spOworICByZXR1cm4gMTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfQml0U2NhblJldmVyc2U2NCh1bnNpZ25lZCBsb25nICpfSW5kZXgsIHVuc2lnbmVkIF9faW50NjQgX01hc2spIHsKKyAgaWYgKCFfTWFzaykKKyAgICByZXR1cm4gMDsKKyAgKl9JbmRleCA9IDYzIC0gX19idWlsdGluX2NsemxsKF9NYXNrKTsKKyAgcmV0dXJuIDE7Cit9CitzdGF0aWMgX19pbmxpbmVfXwordW5zaWduZWQgX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcG9wY250NjQodW5zaWduZWQgX19pbnQ2NCBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKF9WYWx1ZSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2JpdHRlc3Q2NChfX2ludDY0IGNvbnN0ICpfQml0QmFzZSwgX19pbnQ2NCBfQml0UG9zKSB7CisgIHJldHVybiAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYml0dGVzdGFuZGNvbXBsZW1lbnQ2NChfX2ludDY0ICpfQml0QmFzZSwgX19pbnQ2NCBfQml0UG9zKSB7CisgIHVuc2lnbmVkIGNoYXIgX1JlcyA9ICgqX0JpdEJhc2UgPj4gX0JpdFBvcykgJiAxOworICAqX0JpdEJhc2UgPSAqX0JpdEJhc2UgXiAoMWxsIDw8IF9CaXRQb3MpOworICByZXR1cm4gX1JlczsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYml0dGVzdGFuZHJlc2V0NjQoX19pbnQ2NCAqX0JpdEJhc2UsIF9faW50NjQgX0JpdFBvcykgeworICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKKyAgKl9CaXRCYXNlID0gKl9CaXRCYXNlICYgfigxbGwgPDwgX0JpdFBvcyk7CisgIHJldHVybiBfUmVzOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19iaXR0ZXN0YW5kc2V0NjQoX19pbnQ2NCAqX0JpdEJhc2UsIF9faW50NjQgX0JpdFBvcykgeworICB1bnNpZ25lZCBjaGFyIF9SZXMgPSAoKl9CaXRCYXNlID4+IF9CaXRQb3MpICYgMTsKKyAgKl9CaXRCYXNlID0gKl9CaXRCYXNlIHwgKDFsbCA8PCBfQml0UG9zKTsKKyAgcmV0dXJuIF9SZXM7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX2ludGVybG9ja2VkYml0dGVzdGFuZHNldDY0KF9faW50NjQgdm9sYXRpbGUgKl9CaXRCYXNlLCBfX2ludDY0IF9CaXRQb3MpIHsKKyAgbG9uZyBsb25nIF9QcmV2VmFsID0KKyAgICAgIF9fYXRvbWljX2ZldGNoX29yKF9CaXRCYXNlLCAxbGwgPDwgX0JpdFBvcywgX19BVE9NSUNfU0VRX0NTVCk7CisgIHJldHVybiAoX1ByZXZWYWwgPj4gX0JpdFBvcykgJiAxOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgRXhjaGFuZ2UgQWRkCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkOChjaGFyIHZvbGF0aWxlICpfQWRkZW5kLCBjaGFyIF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKF9BZGRlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkMTYoc2hvcnQgdm9sYXRpbGUgKl9BZGRlbmQsIHNob3J0IF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKF9BZGRlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkNjQoX19pbnQ2NCB2b2xhdGlsZSAqX0FkZGVuZCwgX19pbnQ2NCBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZChfQWRkZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgRXhjaGFuZ2UgU3ViCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlU3ViOChjaGFyIHZvbGF0aWxlICpfU3ViZW5kLCBjaGFyIF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKF9TdWJlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlU3ViMTYoc2hvcnQgdm9sYXRpbGUgKl9TdWJlbmQsIHNob3J0IF9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKF9TdWJlbmQsIF9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2VTdWIobG9uZyB2b2xhdGlsZSAqX1N1YmVuZCwgbG9uZyBfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3N1YihfU3ViZW5kLCBfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZVN1YjY0KF9faW50NjQgdm9sYXRpbGUgKl9TdWJlbmQsIF9faW50NjQgX1ZhbHVlKSB7CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9zdWIoX1N1YmVuZCwgX1ZhbHVlLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIEludGVybG9ja2VkIEluY3JlbWVudAorXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkSW5jcmVtZW50MTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfYWRkX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEluY3JlbWVudDY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSkgeworICByZXR1cm4gX19hdG9taWNfYWRkX2ZldGNoKF9WYWx1ZSwgMSwgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBJbnRlcmxvY2tlZCBEZWNyZW1lbnQKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZERlY3JlbWVudDE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWREZWNyZW1lbnQ2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUpIHsKKyAgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaChfVmFsdWUsIDEsIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgQW5kCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZDgoY2hhciB2b2xhdGlsZSAqX1ZhbHVlLCBjaGFyIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19hbmRfZmV0Y2goX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEFuZDE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19hbmRfZmV0Y2goX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkQW5kKGxvbmcgdm9sYXRpbGUgKl9WYWx1ZSwgbG9uZyBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfYW5kX2ZldGNoKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRBbmQ2NChfX2ludDY0IHZvbGF0aWxlICpfVmFsdWUsIF9faW50NjQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX2FuZF9mZXRjaChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIEludGVybG9ja2VkIE9yCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZE9yOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX29yX2ZldGNoKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRPcjE2KHNob3J0IHZvbGF0aWxlICpfVmFsdWUsIHNob3J0IF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY19vcl9mZXRjaChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRPcihsb25nIHZvbGF0aWxlICpfVmFsdWUsIGxvbmcgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX29yX2ZldGNoKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRPcjY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfb3JfZmV0Y2goX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBJbnRlcmxvY2tlZCBYb3IKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yOChjaGFyIHZvbGF0aWxlICpfVmFsdWUsIGNoYXIgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX3hvcl9mZXRjaChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkWG9yMTYoc2hvcnQgdm9sYXRpbGUgKl9WYWx1ZSwgc2hvcnQgX01hc2spIHsKKyAgcmV0dXJuIF9fYXRvbWljX3hvcl9mZXRjaChfVmFsdWUsIF9NYXNrLCBfX0FUT01JQ19TRVFfQ1NUKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRYb3IobG9uZyB2b2xhdGlsZSAqX1ZhbHVlLCBsb25nIF9NYXNrKSB7CisgIHJldHVybiBfX2F0b21pY194b3JfZmV0Y2goX1ZhbHVlLCBfTWFzaywgX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZFhvcjY0KF9faW50NjQgdm9sYXRpbGUgKl9WYWx1ZSwgX19pbnQ2NCBfTWFzaykgeworICByZXR1cm4gX19hdG9taWNfeG9yX2ZldGNoKF9WYWx1ZSwgX01hc2ssIF9fQVRPTUlDX1NFUV9DU1QpOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogSW50ZXJsb2NrZWQgRXhjaGFuZ2UKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX0ludGVybG9ja2VkRXhjaGFuZ2U4KGNoYXIgdm9sYXRpbGUgKl9UYXJnZXQsIGNoYXIgX1ZhbHVlKSB7CisgIF9fYXRvbWljX2V4Y2hhbmdlKF9UYXJnZXQsICZfVmFsdWUsICZfVmFsdWUsIF9fQVRPTUlDX1NFUV9DU1QpOworICByZXR1cm4gX1ZhbHVlOworfQorc3RhdGljIF9faW5saW5lX18gc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRFeGNoYW5nZTE2KHNob3J0IHZvbGF0aWxlICpfVGFyZ2V0LCBzaG9ydCBfVmFsdWUpIHsKKyAgX19hdG9taWNfZXhjaGFuZ2UoX1RhcmdldCwgJl9WYWx1ZSwgJl9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7CisgIHJldHVybiBfVmFsdWU7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gX19pbnQ2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZEV4Y2hhbmdlNjQoX19pbnQ2NCB2b2xhdGlsZSAqX1RhcmdldCwgX19pbnQ2NCBfVmFsdWUpIHsKKyAgX19hdG9taWNfZXhjaGFuZ2UoX1RhcmdldCwgJl9WYWx1ZSwgJl9WYWx1ZSwgX19BVE9NSUNfU0VRX0NTVCk7CisgIHJldHVybiBfVmFsdWU7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiBJbnRlcmxvY2tlZCBDb21wYXJlIEV4Y2hhbmdlCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIF9faW5saW5lX18gY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTgoY2hhciB2b2xhdGlsZSAqX0Rlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9FeGNoYW5nZSwgY2hhciBfQ29tcGFyYW5kKSB7CisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19TRVFfQ1NUKTsKKyAgcmV0dXJuIF9Db21wYXJhbmQ7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBzaG9ydCBfX0RFRkFVTFRfRk5fQVRUUlMKK19JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2KHNob3J0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfRXhjaGFuZ2UsIHNob3J0IF9Db21wYXJhbmQpIHsKKyAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZShfRGVzdGluYXRpb24sICZfQ29tcGFyYW5kLCAmX0V4Y2hhbmdlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQVRPTUlDX1NFUV9DU1QsIF9fQVRPTUlDX1NFUV9DU1QpOworICByZXR1cm4gX0NvbXBhcmFuZDsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NChfX2ludDY0IHZvbGF0aWxlICpfRGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ludDY0IF9FeGNoYW5nZSwgX19pbnQ2NCBfQ29tcGFyYW5kKSB7CisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoX0Rlc3RpbmF0aW9uLCAmX0NvbXBhcmFuZCwgJl9FeGNoYW5nZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01JQ19TRVFfQ1NUKTsKKyAgcmV0dXJuIF9Db21wYXJhbmQ7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogQmFycmllcnMKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBvdGhlciBpbnRyaW5zaWNzIG9yIEMrKzExIGF0b21pY3MgaW5zdGVhZCIpKSkKK19SZWFkV3JpdGVCYXJyaWVyKHZvaWQpIHsKKyAgX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fQVRPTUlDX1NFUV9DU1QpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2Ugb3RoZXIgaW50cmluc2ljcyBvciBDKysxMSBhdG9taWNzIGluc3RlYWQiKSkpCitfUmVhZEJhcnJpZXIodm9pZCkgeworICBfX2F0b21pY19zaWduYWxfZmVuY2UoX19BVE9NSUNfU0VRX0NTVCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBvdGhlciBpbnRyaW5zaWNzIG9yIEMrKzExIGF0b21pY3MgaW5zdGVhZCIpKSkKK19Xcml0ZUJhcnJpZXIodm9pZCkgeworICBfX2F0b21pY19zaWduYWxfZmVuY2UoX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fZmFzdHN0b3JlZmVuY2Uodm9pZCkgeworICBfX2F0b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNfU0VRX0NTVCk7Cit9CisjZW5kaWYKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCit8KiByZWFkZnMsIHJlYWRncworfCogKFBvaW50ZXJzIGluIGFkZHJlc3Mgc3BhY2UgIzI1NiBhbmQgIzI1NyBhcmUgcmVsYXRpdmUgdG8gdGhlIEdTIGFuZCBGUworfCogc2VnbWVudCByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4pCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBfX3B0cl90b19hZGRyX3NwYWNlKF9fYWRkcl9zcGFjZV9uYnIsIF9fdHlwZSwgX19vZmZzZXQpICAgICAgICAgICAgICBcCisgICAgKCh2b2xhdGlsZSBfX3R5cGUgX19hdHRyaWJ1dGVfXygoX19hZGRyZXNzX3NwYWNlX18oX19hZGRyX3NwYWNlX25icikpKSopIFwKKyAgICAoX19vZmZzZXQpKQorCisjaWZkZWYgX19pMzg2X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRmc2J5dGUodW5zaWduZWQgbG9uZyBfX29mZnNldCkgeworICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU3LCB1bnNpZ25lZCBjaGFyLCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fREVGQVVMVF9GTl9BVFRSUworX19yZWFkZnNxd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTcsIHVuc2lnbmVkIF9faW50NjQsIF9fb2Zmc2V0KTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX19yZWFkZnN3b3JkKHVuc2lnbmVkIGxvbmcgX19vZmZzZXQpIHsKKyAgcmV0dXJuICpfX3B0cl90b19hZGRyX3NwYWNlKDI1NywgdW5zaWduZWQgc2hvcnQsIF9fb2Zmc2V0KTsKK30KKyNlbmRpZgorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRnc2J5dGUodW5zaWduZWQgbG9uZyBfX29mZnNldCkgeworICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU2LCB1bnNpZ25lZCBjaGFyLCBfX29mZnNldCk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19yZWFkZ3Nkd29yZCh1bnNpZ25lZCBsb25nIF9fb2Zmc2V0KSB7CisgIHJldHVybiAqX19wdHJfdG9fYWRkcl9zcGFjZSgyNTYsIHVuc2lnbmVkIGxvbmcsIF9fb2Zmc2V0KTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRnc3F3b3JkKHVuc2lnbmVkIGxvbmcgX19vZmZzZXQpIHsKKyAgcmV0dXJuICpfX3B0cl90b19hZGRyX3NwYWNlKDI1NiwgdW5zaWduZWQgX19pbnQ2NCwgX19vZmZzZXQpOworfQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRnc3dvcmQodW5zaWduZWQgbG9uZyBfX29mZnNldCkgeworICByZXR1cm4gKl9fcHRyX3RvX2FkZHJfc3BhY2UoMjU2LCB1bnNpZ25lZCBzaG9ydCwgX19vZmZzZXQpOworfQorI2VuZGlmCisjdW5kZWYgX19wdHJfdG9fYWRkcl9zcGFjZQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKK3wqIG1vdnMsIHN0b3MKK1wqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c2IodW5zaWduZWQgY2hhciAqX19kc3QsIHVuc2lnbmVkIGNoYXIgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBtb3ZzYiIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c2QodW5zaWduZWQgbG9uZyAqX19kc3QsIHVuc2lnbmVkIGxvbmcgY29uc3QgKl9fc3JjLCBzaXplX3QgX19uKSB7CisgIF9fYXNtX18oInJlcCBtb3ZzbCIgOiA6ICJEIihfX2RzdCksICJTIihfX3NyYyksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlc2kiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fbW92c3codW5zaWduZWQgc2hvcnQgKl9fZHN0LCB1bnNpZ25lZCBzaG9ydCBjb25zdCAqX19zcmMsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIG1vdnN3IiA6IDogIkQiKF9fZHN0KSwgIlMiKF9fc3JjKSwgImMiKF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlZGkiLCAiJWVzaSIsICIlZWN4Iik7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19zdG9zYih1bnNpZ25lZCBjaGFyICpfX2RzdCwgdW5zaWduZWQgY2hhciBfX3gsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIHN0b3NiIiA6IDogIkQiKF9fZHN0KSwgImEiKF9feCksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlY3giKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3N0b3NkKHVuc2lnbmVkIGxvbmcgKl9fZHN0LCB1bnNpZ25lZCBsb25nIF9feCwgc2l6ZV90IF9fbikgeworICBfX2FzbV9fKCJyZXAgc3Rvc2wiIDogOiAiRCIoX19kc3QpLCAiYSIoX194KSwgImMiKF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlZGkiLCAiJWVjeCIpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fc3Rvc3codW5zaWduZWQgc2hvcnQgKl9fZHN0LCB1bnNpZ25lZCBzaG9ydCBfX3gsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIHN0b3N3IiA6IDogIkQiKF9fZHN0KSwgImEiKF9feCksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlY3giKTsKK30KKyNlbmRpZgorI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX21vdnNxKHVuc2lnbmVkIGxvbmcgbG9uZyAqX19kc3QsIHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCAqX19zcmMsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIG1vdnNxIiA6IDogIkQiKF9fZHN0KSwgIlMiKF9fc3JjKSwgImMiKF9fbikKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIiVlZGkiLCAiJWVzaSIsICIlZWN4Iik7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19zdG9zcSh1bnNpZ25lZCBfX2ludDY0ICpfX2RzdCwgdW5zaWduZWQgX19pbnQ2NCBfX3gsIHNpemVfdCBfX24pIHsKKyAgX19hc21fXygicmVwIHN0b3NxIiA6IDogIkQiKF9fZHN0KSwgImEiKF9feCksICJjIihfX24pCisgICAgICAgICAgICAgICAgICAgICAgICA6ICIlZWRpIiwgIiVlY3giKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogTWlzYworXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKiBfX0RFRkFVTFRfRk5fQVRUUlMKK19BZGRyZXNzT2ZSZXR1cm5BZGRyZXNzKHZvaWQpIHsKKyAgcmV0dXJuICh2b2lkKikoKGNoYXIqKV9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzKDApICsgc2l6ZW9mKHZvaWQqKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkICogX19ERUZBVUxUX0ZOX0FUVFJTCitfUmV0dXJuQWRkcmVzcyh2b2lkKSB7CisgIHJldHVybiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7Cit9CisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fY3B1aWQoaW50IF9faW5mb1s0XSwgaW50IF9fbGV2ZWwpIHsKKyAgX19hc21fXyAoImNwdWlkIiA6ICI9YSIoX19pbmZvWzBdKSwgIj1iIiAoX19pbmZvWzFdKSwgIj1jIihfX2luZm9bMl0pLCAiPWQiKF9faW5mb1szXSkKKyAgICAgICAgICAgICAgICAgICA6ICJhIihfX2xldmVsKSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX19jcHVpZGV4KGludCBfX2luZm9bNF0sIGludCBfX2xldmVsLCBpbnQgX19lY3gpIHsKKyAgX19hc21fXyAoImNwdWlkIiA6ICI9YSIoX19pbmZvWzBdKSwgIj1iIiAoX19pbmZvWzFdKSwgIj1jIihfX2luZm9bMl0pLCAiPWQiKF9faW5mb1szXSkKKyAgICAgICAgICAgICAgICAgICA6ICJhIihfX2xldmVsKSwgImMiKF9fZWN4KSk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBfX2ludDY0IF9fY2RlY2wgX19ERUZBVUxUX0ZOX0FUVFJTCitfeGdldGJ2KHVuc2lnbmVkIGludCBfX3hjcl9ubykgeworICB1bnNpZ25lZCBpbnQgX19lYXgsIF9fZWR4OworICBfX2FzbV9fICgieGdldGJ2IiA6ICI9YSIgKF9fZWF4KSwgIj1kIiAoX19lZHgpIDogImMiIChfX3hjcl9ubykpOworICByZXR1cm4gKCh1bnNpZ25lZCBfX2ludDY0KV9fZWR4IDw8IDMyKSB8IF9fZWF4OworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19faGFsdCh2b2lkKSB7CisgIF9fYXNtX18gdm9sYXRpbGUgKCJobHQiKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAorfCogUHJpdmlsZWdlZCBpbnRyaW5zaWNzCitcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIF9faW50NjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3JlYWRtc3IodW5zaWduZWQgbG9uZyBfX3JlZ2lzdGVyKSB7CisgIC8vIExvYWRzIHRoZSBjb250ZW50cyBvZiBhIDY0LWJpdCBtb2RlbCBzcGVjaWZpYyByZWdpc3RlciAoTVNSKSBzcGVjaWZpZWQgaW4KKyAgLy8gdGhlIEVDWCByZWdpc3RlciBpbnRvIHJlZ2lzdGVycyBFRFg6RUFYLiBUaGUgRURYIHJlZ2lzdGVyIGlzIGxvYWRlZCB3aXRoCisgIC8vIHRoZSBoaWdoLW9yZGVyIDMyIGJpdHMgb2YgdGhlIE1TUiBhbmQgdGhlIEVBWCByZWdpc3RlciBpcyBsb2FkZWQgd2l0aCB0aGUKKyAgLy8gbG93LW9yZGVyIDMyIGJpdHMuIElmIGxlc3MgdGhhbiA2NCBiaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgTVNSIGJlaW5nCisgIC8vIHJlYWQsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgdG8gRURYOkVBWCBpbiB1bmltcGxlbWVudGVkIGJpdCBsb2NhdGlvbnMgYXJlCisgIC8vIHVuZGVmaW5lZC4KKyAgdW5zaWduZWQgbG9uZyBfX2VkeDsKKyAgdW5zaWduZWQgbG9uZyBfX2VheDsKKyAgX19hc21fXyAoInJkbXNyIiA6ICI9ZCIoX19lZHgpLCAiPWEiKF9fZWF4KSA6ICJjIihfX3JlZ2lzdGVyKSk7CisgIHJldHVybiAoKCh1bnNpZ25lZCBfX2ludDY0KV9fZWR4KSA8PCAzMikgfCAodW5zaWduZWQgX19pbnQ2NClfX2VheDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fcmVhZGNyMyh2b2lkKSB7CisgIHVuc2lnbmVkIGxvbmcgX19jcjNfdmFsOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdiAlJWNyMywgJTAiIDogIj1xIihfX2NyM192YWwpIDogOiAibWVtb3J5Iik7CisgIHJldHVybiBfX2NyM192YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3dyaXRlY3IzKHVuc2lnbmVkIGludCBfX2NyM192YWwpIHsKKyAgX19hc21fXyAoIm1vdiAlMCwgJSVjcjMiIDogOiAicSIoX19jcjNfdmFsKSA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0lOVFJJTl9IICovCisjZW5kaWYgLyogX01TQ19WRVIgKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX2NsYW5nX2N1ZGFfcnVudGltZV93cmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1ZjAzMwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oCkBAIC0wLDAgKzEsMjE2IEBACisvKj09PS0tLS0gX19jbGFuZ19jdWRhX3J1bnRpbWVfd3JhcHBlci5oIC0gQ1VEQSBydW50aW1lIHN1cHBvcnQgLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyoKKyAqIFdBUk5JTkc6IFRoaXMgaGVhZGVyIGlzIGludGVuZGVkIHRvIGJlIGRpcmVjdGx5IC1pbmNsdWRlJ2QgYnkKKyAqIHRoZSBjb21waWxlciBhbmQgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGluY2x1ZGVkIGJ5IHVzZXJzLgorICoKKyAqIENVREEgaGVhZGVycyBhcmUgaW1wbGVtZW50ZWQgaW4gYSB3YXkgdGhhdCBjdXJyZW50bHkgbWFrZXMgaXQKKyAqIGltcG9zc2libGUgZm9yIHVzZXIgY29kZSB0byAjaW5jbHVkZSBkaXJlY3RseSB3aGVuIGNvbXBpbGluZyB3aXRoCisgKiBDbGFuZy4gVGhleSBwcmVzZW50IGRpZmZlcmVudCB2aWV3IG9mIENVREEtc3VwcGxpZWQgZnVuY3Rpb25zCisgKiBkZXBlbmRpbmcgb24gd2hlcmUgaW4gTlZDQydzIGNvbXBpbGF0aW9uIHBpcGVsaW5lIHRoZSBoZWFkZXJzIGFyZQorICogaW5jbHVkZWQuIE5laXRoZXIgb2YgdGhlc2UgbW9kZXMgcHJvdmlkZXMgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2l0aAorICogY29ycmVjdCBhdHRyaWJ1dGVzLCBzbyB3ZSB1c2UgcHJlcHJvY2Vzc29yIHRvIGZvcmNlIHRoZSBoZWFkZXJzCisgKiBpbnRvIGEgZm9ybSB0aGF0IENsYW5nIGNhbiB1c2UuCisgKgorICogU2ltaWxhcmx5IHRvIE5WQ0Mgd2hpY2ggLWluY2x1ZGUncyBjdWRhX3J1bnRpbWUuaCwgQ2xhbmcgLWluY2x1ZGUncworICogdGhpcyBmaWxlIGR1cmluZyBldmVyeSBDVURBIGNvbXBpbGF0aW9uLgorICovCisKKyNpZm5kZWYgX19DTEFOR19DVURBX1JVTlRJTUVfV1JBUFBFUl9IX18KKyNkZWZpbmUgX19DTEFOR19DVURBX1JVTlRJTUVfV1JBUFBFUl9IX18KKworI2lmIGRlZmluZWQoX19DVURBX18pICYmIGRlZmluZWQoX19jbGFuZ19fKQorCisvLyBJbmNsdWRlIHNvbWUgc3RhbmRhcmQgaGVhZGVycyB0byBhdm9pZCBDVURBIGhlYWRlcnMgaW5jbHVkaW5nIHRoZW0KKy8vIHdoaWxlIHNvbWUgcmVxdWlyZWQgbWFjcm9zIChsaWtlIF9fVEhST1cpIGFyZSBpbiBhIHdlaXJkIHN0YXRlLgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGNtYXRoPgorCisvLyBQcmVzZXJ2ZSBjb21tb24gbWFjcm9zIHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGJlbG93IGJ5IHVzIG9yIGJ5IENVREEKKy8vIGhlYWRlcnMuCisjcHJhZ21hIHB1c2hfbWFjcm8oIl9fVEhST1ciKQorI3ByYWdtYSBwdXNoX21hY3JvKCJfX0NVREFfQVJDSF9fIikKKworLy8gV0FSTklORzogUHJlcHJvY2Vzc29yIGhhY2tzIGJlbG93IGFyZSBiYXNlZCBvbiBzcGVjaWZpYyBkZXRhaWxzIG9mCisvLyBDVURBLTcueCBoZWFkZXJzIGFuZCBhcmUgbm90IGV4cGVjdGVkIHRvIHdvcmsgd2l0aCBhbnkgb3RoZXIKKy8vIHZlcnNpb24gb2YgQ1VEQSBoZWFkZXJzLgorI2luY2x1ZGUgImN1ZGEuaCIKKyNpZiAhZGVmaW5lZChDVURBX1ZFUlNJT04pCisjZXJyb3IgImN1ZGEuaCBkaWQgbm90IGRlZmluZSBDVURBX1ZFUlNJT04iCisjZWxpZiBDVURBX1ZFUlNJT04gPCA3MDAwIHx8IENVREFfVkVSU0lPTiA+IDcwNTAKKyNlcnJvciAiVW5zdXBwb3J0ZWQgQ1VEQSB2ZXJzaW9uISIKKyNlbmRpZgorCisvLyBNYWtlIGxhcmdlc3Qgc3Vic2V0IG9mIGRldmljZSBmdW5jdGlvbnMgYXZhaWxhYmxlIGR1cmluZyBob3N0CisvLyBjb21waWxhdGlvbiAtLSBTTV8zNSBmb3IgdGhlIHRpbWUgYmVpbmcuCisjaWZuZGVmIF9fQ1VEQV9BUkNIX18KKyNkZWZpbmUgX19DVURBX0FSQ0hfXyAzNTAKKyNlbmRpZgorCisjaW5jbHVkZSAiY3VkYV9idWlsdGluX3ZhcnMuaCIKKworLy8gTm8gbmVlZCBmb3IgZGV2aWNlX2xhdW5jaF9wYXJhbWV0ZXJzLmggYXMgY3VkYV9idWlsdGluX3ZhcnMuaCBhYm92ZQorLy8gaGFzIHRha2VuIGNhcmUgb2YgYnVpbHRpbiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIGZpbGUuCisjZGVmaW5lIF9fREVWSUNFX0xBVU5DSF9QQVJBTUVURVJTX0hfXworCisvLyB7bWF0aCxkZXZpY2V9X2Z1bmN0aW9ucy5oIG9ubHkgaGF2ZSBkZWNsYXJhdGlvbnMgb2YgdGhlCisvLyBmdW5jdGlvbnMuIFdlIGRvbid0IG5lZWQgdGhlbSBhcyB3ZSdyZSBnb2luZyB0byBwdWxsIGluIHRoZWlyCisvLyBkZWZpbml0aW9ucyBmcm9tIC5ocHAgZmlsZXMuCisjZGVmaW5lIF9fREVWSUNFX0ZVTkNUSU9OU19IX18KKyNkZWZpbmUgX19NQVRIX0ZVTkNUSU9OU19IX18KKworI3VuZGVmIF9fQ1VEQUNDX18KKyNkZWZpbmUgX19DVURBQkVfXworLy8gRGlzYWJsZXMgZGVmaW5pdGlvbnMgb2YgZGV2aWNlLXNpZGUgcnVudGltZSBzdXBwb3J0IHN0dWJzIGluCisvLyBjdWRhX2RldmljZV9ydW50aW1lX2FwaS5oCisjZGVmaW5lIF9fQ1VEQURFVlJUX0lOVEVSTkFMX18KKyNpbmNsdWRlICJob3N0X2NvbmZpZy5oIgorI2luY2x1ZGUgImhvc3RfZGVmaW5lcy5oIgorI2luY2x1ZGUgImRyaXZlcl90eXBlcy5oIgorI2luY2x1ZGUgImNvbW1vbl9mdW5jdGlvbnMuaCIKKyN1bmRlZiBfX0NVREFERVZSVF9JTlRFUk5BTF9fCisKKyN1bmRlZiBfX0NVREFCRV9fCisjZGVmaW5lIF9fQ1VEQUNDX18KKyNpbmNsdWRlICJjdWRhX3J1bnRpbWUuaCIKKworI3VuZGVmIF9fQ1VEQUNDX18KKyNkZWZpbmUgX19DVURBQkVfXworCisvLyBDVURBIGhlYWRlcnMgdXNlIF9fbnZ2bV9tZW1jcHkgYW5kIF9fbnZ2bV9tZW1zZXQgd2hpY2ggQ2xhbmcgZG9lcworLy8gbm90IGhhdmUgYXQgdGhlIG1vbWVudC4gRW11bGF0ZSB0aGVtIHdpdGggYSBidWlsdGluIG1lbWNweS9tZW1zZXQuCisjZGVmaW5lIF9fbnZ2bV9tZW1jcHkocyxkLG4sYSkgX19idWlsdGluX21lbWNweShzLGQsbikKKyNkZWZpbmUgX19udnZtX21lbXNldChkLGMsbixhKSBfX2J1aWx0aW5fbWVtc2V0KGQsYyxuKQorCisjaW5jbHVkZSAiY3J0L2hvc3RfcnVudGltZS5oIgorI2luY2x1ZGUgImNydC9kZXZpY2VfcnVudGltZS5oIgorLy8gZGV2aWNlX3J1bnRpbWUuaCBkZWZpbmVzIF9fY3hhXyogbWFjcm9zIHRoYXQgd2lsbCBjb25mbGljdCB3aXRoCisvLyBjeHhhYmkuaC4KKy8vIEZJWE1FOiByZWRlZmluZSB0aGVzZSBhcyBfX2RldmljZV9fIGZ1bmN0aW9ucy4KKyN1bmRlZiBfX2N4YV92ZWNfY3RvcgorI3VuZGVmIF9fY3hhX3ZlY19jY3RvcgorI3VuZGVmIF9fY3hhX3ZlY19kdG9yCisjdW5kZWYgX19jeGFfdmVjX25ldzIKKyN1bmRlZiBfX2N4YV92ZWNfbmV3MworI3VuZGVmIF9fY3hhX3ZlY19kZWxldGUyCisjdW5kZWYgX19jeGFfdmVjX2RlbGV0ZQorI3VuZGVmIF9fY3hhX3ZlY19kZWxldGUzCisjdW5kZWYgX19jeGFfcHVyZV92aXJ0dWFsCisKKy8vIFdlIG5lZWQgZGVjbHMgZm9yIGZ1bmN0aW9ucyBpbiBDVURBJ3MgbGliZGV2aWNlIHdpdGggX19kZXZpY2VfXworLy8gYXR0cmlidXRlIG9ubHkuIEFsYXMgdGhleSBjb21lIGVpdGhlciBhcyBfX2hvc3RfXyBfX2RldmljZV9fIG9yCisvLyB3aXRoIG5vIGF0dHJpYnV0ZXMgYXQgYWxsLiBUbyB3b3JrIGFyb3VuZCB0aGF0LCBkZWZpbmUgX19DVURBX1JUQ19fCisvLyB3aGljaCBwcm9kdWNlcyBIRCB2YXJpYW50IGFuZCB1bmRlZiBfX2hvc3RfXyB3aGljaCBnaXZlcyB1cyBkZXNpZGVkCisvLyBkZWNscyB3aXRoIF9fZGV2aWNlX18gYXR0cmlidXRlLgorI3ByYWdtYSBwdXNoX21hY3JvKCJfX2hvc3RfXyIpCisjZGVmaW5lIF9faG9zdF9fCisjZGVmaW5lIF9fQ1VEQUNDX1JUQ19fCisjaW5jbHVkZSAiZGV2aWNlX2Z1bmN0aW9uc19kZWNscy5oIgorI3VuZGVmIF9fQ1VEQUNDX1JUQ19fCisKKy8vIFRlbXBvcmFyaWx5IHBvaXNvbiBfX2hvc3RfXyBtYWNybyB0byBlbnN1cmUgaXQncyBub3QgdXNlZCBieSBhbnkgb2YKKy8vIHRoZSBoZWFkZXJzIHdlJ3JlIGFib3V0IHRvIGluY2x1ZGUuCisjZGVmaW5lIF9faG9zdF9fIFVORVhQRUNURURfSE9TVF9BVFRSSUJVVEUKKworLy8gZGV2aWNlX2Z1bmN0aW9ucy5ocHAgYW5kIG1hdGhfZnVuY3Rpb25zKi5ocHAgdXNlICdzdGF0aWMKKy8vIF9fZm9yY2VpbmxpbmVfXycgKHdpdGggbm8gX19kZXZpY2VfXykgZm9yIGRlZmluaXRpb25zIG9mIGRldmljZQorLy8gZnVuY3Rpb25zLiBUZW1wb3JhcmlseSByZWRlZmluZSBfX2ZvcmNlaW5saW5lX18gdG8gaW5jbHVkZQorLy8gX19kZXZpY2VfXy4KKyNwcmFnbWEgcHVzaF9tYWNybygiX19mb3JjZWlubGluZV9fIikKKyNkZWZpbmUgX19mb3JjZWlubGluZV9fIF9fZGV2aWNlX18gX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNpbmNsdWRlICJkZXZpY2VfZnVuY3Rpb25zLmhwcCIKKyNpbmNsdWRlICJtYXRoX2Z1bmN0aW9ucy5ocHAiCisjaW5jbHVkZSAibWF0aF9mdW5jdGlvbnNfZGJsX3B0eDMuaHBwIgorI3ByYWdtYSBwb3BfbWFjcm8oIl9fZm9yY2VpbmxpbmVfXyIpCisKKy8vIFB1bGwgaW4gaG9zdC1vbmx5IGZ1bmN0aW9ucyB0aGF0IGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIG5laXRoZXIKKy8vIF9fQ1VEQUNDX18gbm9yIF9fQ1VEQUJFX18gYXJlIGRlZmluZWQuCisjdW5kZWYgX19NQVRIX0ZVTkNUSU9OU19IUFBfXworI3VuZGVmIF9fQ1VEQUJFX18KKyNpbmNsdWRlICJtYXRoX2Z1bmN0aW9ucy5ocHAiCisvLyBBbGFzLCBhZGRpdGlvbmFsIG92ZXJsb2FkcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGFyZSBoYXJkIHRvIGdldCB0by4KKy8vIENvbnNpZGVyaW5nIHRoYXQgd2Ugb25seSBuZWVkIHRoZXNlIG92ZXJsb2FkcyBmb3IgYSBmZXcgZnVuY3Rpb25zLAorLy8gd2UgY2FuIHByb3ZpZGUgdGhlbSBoZXJlLgorc3RhdGljIGlubGluZSBmbG9hdCByc3FydChmbG9hdCBhKSB7IHJldHVybiByc3FydGYoYSk7IH0KK3N0YXRpYyBpbmxpbmUgZmxvYXQgcmNicnQoZmxvYXQgYSkgeyByZXR1cm4gcmNicnRmKGEpOyB9CitzdGF0aWMgaW5saW5lIGZsb2F0IHNpbnBpKGZsb2F0IGEpIHsgcmV0dXJuIHNpbnBpZihhKTsgfQorc3RhdGljIGlubGluZSBmbG9hdCBjb3NwaShmbG9hdCBhKSB7IHJldHVybiBjb3NwaWYoYSk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzaW5jb3NwaShmbG9hdCBhLCBmbG9hdCAqYiwgZmxvYXQgKmMpIHsKKyAgcmV0dXJuIHNpbmNvc3BpKGEsIGIsIGMpOworfQorc3RhdGljIGlubGluZSBmbG9hdCBlcmZjaW52KGZsb2F0IGEpIHsgcmV0dXJuIGVyZmNpbnZmKGEpOyB9CitzdGF0aWMgaW5saW5lIGZsb2F0IG5vcm1jZGZpbnYoZmxvYXQgYSkgeyByZXR1cm4gbm9ybWNkZmludmYoYSk7IH0KK3N0YXRpYyBpbmxpbmUgZmxvYXQgbm9ybWNkZihmbG9hdCBhKSB7IHJldHVybiBub3JtY2RmZihhKTsgfQorc3RhdGljIGlubGluZSBmbG9hdCBlcmZjeChmbG9hdCBhKSB7IHJldHVybiBlcmZjeGYoYSk7IH0KKworLy8gRm9yIHNvbWUgcmVhc29uIHNpbmdsZS1hcmd1bWVudCB2YXJpYW50IGlzIG5vdCBhbHdheXMgZGVjbGFyZWQgYnkKKy8vIENVREEgaGVhZGVycy4gQWxhcywgZGV2aWNlX2Z1bmN0aW9ucy5ocHAgaW5jbHVkZWQgYmVsb3cgbmVlZHMgaXQuCitzdGF0aWMgaW5saW5lIF9fZGV2aWNlX18gdm9pZCBfX2Jya3B0KGludCBjKSB7IF9fYnJrcHQoKTsgfQorCisvLyBOb3cgaW5jbHVkZSAqLmhwcCB3aXRoIGRlZmluaXRpb25zIG9mIHZhcmlvdXMgR1BVIGZ1bmN0aW9ucy4gIEFsYXMsCisvLyBhIGxvdCBvZiB0aGlucyBnZXQgZGVjbGFyZWQvZGVmaW5lZCB3aXRoIF9faG9zdF9fIGF0dHJpYnV0ZSB3aGljaAorLy8gd2UgZG9uJ3Qgd2FudCBhbmQgd2UgaGF2ZSB0byBkZWZpbmUgaXQgb3V0LiBXZSBhbHNvIGhhdmUgdG8gaW5jbHVkZQorLy8ge2RldmljZSxtYXRofV9mdW5jdGlvbnMuaHBwIGFnYWluIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIG90aGVyCisvLyBicmFuY2ggb2YgI2lmL2Vsc2UgaW5zaWRlLgorCisjZGVmaW5lIF9faG9zdF9fCisjdW5kZWYgX19DVURBQkVfXworI2RlZmluZSBfX0NVREFDQ19fCisjdW5kZWYgX19ERVZJQ0VfRlVOQ1RJT05TX0hQUF9fCisjaW5jbHVkZSAiZGV2aWNlX2Z1bmN0aW9ucy5ocHAiCisjaW5jbHVkZSAiZGV2aWNlX2F0b21pY19mdW5jdGlvbnMuaHBwIgorI2luY2x1ZGUgInNtXzIwX2F0b21pY19mdW5jdGlvbnMuaHBwIgorI2luY2x1ZGUgInNtXzMyX2F0b21pY19mdW5jdGlvbnMuaHBwIgorI2luY2x1ZGUgInNtXzIwX2ludHJpbnNpY3MuaHBwIgorLy8gc21fMzBfaW50cmluc2ljcy5oIGhhcyBkZWNsYXJhdGlvbnMgdGhhdCB1c2UgZGVmYXVsdCBhcmd1bWVudCwgc28KKy8vIHdlIGhhdmUgdG8gaW5jbHVkZSBpdCBhbmQgaXQgd2lsbCBpbiB0dXJuIGluY2x1ZGUgLmhwcAorI2luY2x1ZGUgInNtXzMwX2ludHJpbnNpY3MuaCIKKyNpbmNsdWRlICJzbV8zMl9pbnRyaW5zaWNzLmhwcCIKKyN1bmRlZiBfX01BVEhfRlVOQ1RJT05TX0hQUF9fCisjaW5jbHVkZSAibWF0aF9mdW5jdGlvbnMuaHBwIgorI3ByYWdtYSBwb3BfbWFjcm8oIl9faG9zdF9fIikKKworI2luY2x1ZGUgInRleHR1cmVfaW5kaXJlY3RfZnVuY3Rpb25zLmgiCisKKy8vIFJlc3RvcmUgc3RhdGUgb2YgX19DVURBX0FSQ0hfXyBhbmQgX19USFJPVyB3ZSBoYWQgb24gZW50cnkuCisjcHJhZ21hIHBvcF9tYWNybygiX19DVURBX0FSQ0hfXyIpCisjcHJhZ21hIHBvcF9tYWNybygiX19USFJPVyIpCisKKy8vIFNldCB1cCBjb21waWxlciBtYWNyb3MgZXhwZWN0ZWQgdG8gYmUgc2VlbiBkdXJpbmcgY29tcGlsYXRpb24uCisjdW5kZWYgX19DVURBQkVfXworI2RlZmluZSBfX0NVREFDQ19fCisjZGVmaW5lIF9fTlZDQ19fCisKKyNpZiBkZWZpbmVkKF9fQ1VEQV9BUkNIX18pCisvLyBXZSBuZWVkIHRvIGVtaXQgSVIgZGVjbGFyYXRpb24gZm9yIG5vbi1leGlzdGluZyBfX252dm1fcmVmbGVjdCgpIHRvCisvLyBsZXQgYmFja2VuZCBrbm93IHRoYXQgaXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY29uc3Qgbm90aHJvdworLy8gZnVuY3Rpb24gd2hpY2ggaXMgd2hhdCBOVlZNUmVmbGVjdCBwYXNzIGV4cGVjdHMgdG8gc2VlLgorZXh0ZXJuICJDIiBfX2RldmljZV9fIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgaW50IF9fbnZ2bV9yZWZsZWN0KGNvbnN0IHZvaWQgKik7CitzdGF0aWMgX19kZXZpY2VfXyBfX2F0dHJpYnV0ZV9fKCh1c2VkKSkgaW50IF9fbnZ2bV9yZWZsZWN0X2FuY2hvcigpIHsKKyAgcmV0dXJuIF9fbnZ2bV9yZWZsZWN0KCJOT05FIik7Cit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fQ1VEQV9fCisjZW5kaWYgLy8gX19DTEFOR19DVURBX1JVTlRJTUVfV1JBUFBFUl9IX18KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19zdGRkZWZfbWF4X2FsaWduX3QuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvX19zdGRkZWZfbWF4X2FsaWduX3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTEwY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3N0ZGRlZl9tYXhfYWxpZ25fdC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qPT09LS0tLSBfX3N0ZGRlZl9tYXhfYWxpZ25fdC5oIC0gRGVmaW5pdGlvbiBvZiBtYXhfYWxpZ25fdCBmb3IgbW9kdWxlcyAtLS09PT0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgQ2hhbmRsZXIgQ2FycnV0aAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0NMQU5HX01BWF9BTElHTl9UX0RFRklORUQKKyNkZWZpbmUgX19DTEFOR19NQVhfQUxJR05fVF9ERUZJTkVECisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQordHlwZWRlZiBkb3VibGUgbWF4X2FsaWduX3Q7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKK3R5cGVkZWYgbG9uZyBkb3VibGUgbWF4X2FsaWduX3Q7CisjZWxzZQorLy8gRGVmaW5lICdtYXhfYWxpZ25fdCcgdG8gbWF0Y2ggdGhlIEdDQyBkZWZpbml0aW9uLgordHlwZWRlZiBzdHJ1Y3QgeworICBsb25nIGxvbmcgX19jbGFuZ19tYXhfYWxpZ25fbm9uY2UxCisgICAgICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhfX2FsaWdub2ZfXyhsb25nIGxvbmcpKSkpOworICBsb25nIGRvdWJsZSBfX2NsYW5nX21heF9hbGlnbl9ub25jZTIKKyAgICAgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKF9fYWxpZ25vZl9fKGxvbmcgZG91YmxlKSkpKTsKK30gbWF4X2FsaWduX3Q7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fd21taW50cmluX2Flcy5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3dtbWludHJpbl9hZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDA3OTllCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3dtbWludHJpbl9hZXMuaApAQCAtMCwwICsxLDY2IEBACisvKj09PS0tLS0gX193bW1pbnRyaW5fYWVzLmggLSBBRVMgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfV01NSU5UUklOX0FFU19ICisjZGVmaW5lIF9XTU1JTlRSSU5fQUVTX0gKKworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImFlcyIpKSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZXNlbmNfc2kxMjgoX19tMTI4aSBfX1YsIF9fbTEyOGkgX19SKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWVzZW5jMTI4KF9fViwgX19SKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZXNlbmNsYXN0X3NpMTI4KF9fbTEyOGkgX19WLCBfX20xMjhpIF9fUikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2VuY2xhc3QxMjgoX19WLCBfX1IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Flc2RlY19zaTEyOChfX20xMjhpIF9fViwgX19tMTI4aSBfX1IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9hZXNkZWMxMjgoX19WLCBfX1IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Flc2RlY2xhc3Rfc2kxMjgoX19tMTI4aSBfX1YsIF9fbTEyOGkgX19SKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWVzZGVjbGFzdDEyOChfX1YsIF9fUik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWVzaW1jX3NpMTI4KF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfYWVzaW1jMTI4KF9fVik7Cit9CisKKyNkZWZpbmUgX21tX2Flc2tleWdlbmFzc2lzdF9zaTEyOChDLCBSKSBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2Flc2tleWdlbmFzc2lzdDEyOCgoX192MmRpKShfX20xMjhpKShDKSwgKGludCkoUikpCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmICAvKiBfV01NSU5UUklOX0FFU19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL19fd21taW50cmluX3BjbG11bC5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3dtbWludHJpbl9wY2xtdWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU5NDRlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9fX3dtbWludHJpbl9wY2xtdWwuaApAQCAtMCwwICsxLDMwIEBACisvKj09PS0tLS0gX193bW1pbnRyaW5fcGNsbXVsLmggLSBQQ01VTCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKyNpZm5kZWYgX1dNTUlOVFJJTl9QQ0xNVUxfSAorI2RlZmluZSBfV01NSU5UUklOX1BDTE1VTF9ICisKKyNkZWZpbmUgX21tX2NsbXVsZXBpNjRfc2kxMjgoX19YLCBfX1ksIF9fSSkgXAorICAoKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGNsbXVscWRxMTI4KChfX3YyZGkpKF9fbTEyOGkpKF9fWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShfX1kpLCAoY2hhcikoX19JKSkpCisKKyNlbmRpZiAvKiBfV01NSU5UUklOX1BDTE1VTF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FkeGludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hZHhpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTM0NzI4Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hZHhpbnRyaW4uaApAQCAtMCwwICsxLDg2IEBACisvKj09PS0tLS0gYWR4aW50cmluLmggLSBBRFggaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhZHhpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQURYSU5UUklOX0gKKyNkZWZpbmUgX19BRFhJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorCisvKiBJbnRyaW5zaWNzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbmx5IGlmIF9fQURYX18gZGVmaW5lZCAqLworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhZHgiKSkpCitfYWRkY2Fycnl4X3UzMih1bnNpZ25lZCBjaGFyIF9fY2YsIHVuc2lnbmVkIGludCBfX3gsIHVuc2lnbmVkIGludCBfX3ksCisgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FkZGNhcnJ5eF91MzIoX19jZiwgX194LCBfX3ksIF9fcCk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImFkeCIpKSkKK19hZGRjYXJyeXhfdTY0KHVuc2lnbmVkIGNoYXIgX19jZiwgdW5zaWduZWQgbG9uZyBsb25nIF9feCwKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ksIHVuc2lnbmVkIGxvbmcgbG9uZyAgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FkZGNhcnJ5eF91NjQoX19jZiwgX194LCBfX3ksIF9fcCk7Cit9CisjZW5kaWYKKworLyogSW50cmluc2ljcyB0aGF0IGFyZSBhbHNvIGF2YWlsYWJsZSBpZiBfX0FEWF9fIHVuZGVmaW5lZCAqLworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfYWRkY2FycnlfdTMyKHVuc2lnbmVkIGNoYXIgX19jZiwgdW5zaWduZWQgaW50IF9feCwgdW5zaWduZWQgaW50IF9feSwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9hZGRjYXJyeV91MzIoX19jZiwgX194LCBfX3ksIF9fcCk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgY2hhciBfX0RFRkFVTFRfRk5fQVRUUlMKK19hZGRjYXJyeV91NjQodW5zaWduZWQgY2hhciBfX2NmLCB1bnNpZ25lZCBsb25nIGxvbmcgX194LAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX195LCB1bnNpZ25lZCBsb25nIGxvbmcgICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9hZGRjYXJyeV91NjQoX19jZiwgX194LCBfX3ksIF9fcCk7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGNoYXIgX19ERUZBVUxUX0ZOX0FUVFJTCitfc3ViYm9ycm93X3UzMih1bnNpZ25lZCBjaGFyIF9fY2YsIHVuc2lnbmVkIGludCBfX3gsIHVuc2lnbmVkIGludCBfX3ksCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfc3ViYm9ycm93X3UzMihfX2NmLCBfX3gsIF9feSwgX19wKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBjaGFyIF9fREVGQVVMVF9GTl9BVFRSUworX3N1YmJvcnJvd191NjQodW5zaWduZWQgY2hhciBfX2NmLCB1bnNpZ25lZCBsb25nIGxvbmcgX194LAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9feSwgdW5zaWduZWQgbG9uZyBsb25nICAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfc3ViYm9ycm93X3U2NChfX2NmLCBfX3gsIF9feSwgX19wKTsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0FEWElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FsdGl2ZWMuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYWx0aXZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOTE1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FsdGl2ZWMuaApAQCAtMCwwICsxLDEzOTE5IEBACisvKj09PS0tLS0gYWx0aXZlYy5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciB0eXBlIGdlbmVyaWMgbWF0aCAtLS0tLS0tLS0tLS0tLS09PT0qXAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fQUxUSVZFQ19ICisjZGVmaW5lIF9fQUxUSVZFQ19ICisKKyNpZm5kZWYgX19BTFRJVkVDX18KKyNlcnJvciAiQWx0aVZlYyBzdXBwb3J0IG5vdCBlbmFibGVkIgorI2VuZGlmCisKKy8qIGNvbnN0YW50cyBmb3IgbWFwcGluZyBDUjYgYml0cyB0byBwcmVkaWNhdGUgcmVzdWx0LiAqLworCisjZGVmaW5lIF9fQ1I2X0VRIDAKKyNkZWZpbmUgX19DUjZfRVFfUkVWIDEKKyNkZWZpbmUgX19DUjZfTFQgMgorI2RlZmluZSBfX0NSNl9MVF9SRVYgMworCisjZGVmaW5lIF9fQVRUUlNfb19haSBfX2F0dHJpYnV0ZV9fKChfX292ZXJsb2FkYWJsZV9fLCBfX2Fsd2F5c19pbmxpbmVfXykpCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKTsKKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpOworCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYyk7CisjZW5kaWYKKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpOworCisvKiB2ZWNfYWJzICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfYWJzX3YxNnFpIHZlY19hYnMKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfYWJzX3Y4aGkgdmVjX2FicworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY19hYnNfdjRzaSB2ZWNfYWJzCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKF9fYSwgLV9fYSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWJzKHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2goX19hLCAtX19hKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYWJzKHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KF9fYSwgLV9fYSk7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYWJzKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNkKF9fYSwgLV9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2Ficyh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDB4N0ZGRkZGRkYpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYWJzKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPSB7IDB4N0ZGRkZGRkZGRkZGRkZGRiwgMHg3RkZGRkZGRkZGRkZGRkZGIH07CisgIF9fcmVzICY9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYTsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOworfQorI2VuZGlmCisKKy8qIHZlY19hYnNzICovCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic3NfdjE2cWkgdmVjX2Fic3MKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfYWJzc192OGhpIHZlY19hYnNzCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX2Fic3NfdjRzaSB2ZWNfYWJzcworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYWJzcyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoCisgICAgICBfX2EsIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoKHZlY3RvciBzaWduZWQgY2hhcikoMCksIF9fYSkpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2Fic3ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaCgKKyAgICAgIF9fYSwgX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocygodmVjdG9yIHNpZ25lZCBzaG9ydCkoMCksIF9fYSkpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hYnNzKHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KAorICAgICAgX19hLCBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKCh2ZWN0b3Igc2lnbmVkIGludCkoMCksIF9fYSkpOworfQorCisvKiB2ZWNfYWRkICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYWRkKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpIHZlY19hZGQodmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisjZW5kaWYgLy8gZGVmaW5lZChfX1BPV0VSOF9WRUNUT1JfXykgJiYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfYWRkKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX2FkZCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKyNlbmRpZiAvLyBfX1ZTWF9fCisKKy8qIHZlY19hZGRlICovCisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19hZGRlKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZXVxbShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19hZGRlKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZXVxbShfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWRkZWMgKi8KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX2FkZGVjKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGVjdXEoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkZWModmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZWN1cShfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmFkZHVibSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1Ym0gdmVjX3ZhZGR1Ym0KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1Ym0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1Ym0odmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1Ym0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFkZHVibSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkdWJtKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1Ym0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworLyogdmVjX3ZhZGR1aG0gKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWhtIHZlY192YWRkdWhtCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkdWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkdWhtKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHVobSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgKyAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdWhtKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgKyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCisvKiB2ZWNfdmFkZHV3bSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1d20gdmVjX3ZhZGR1d20KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdtKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1d20odmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1d20odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICsgKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1d20odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdtKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSArIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSArICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworLyogdmVjX3ZhZGRmcCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRmcCB2ZWNfdmFkZGZwCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZhZGRmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKKy8qIHZlY19hZGRjICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZGModmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192YWRkY3V3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1dyhfX2EsIF9fYik7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19hZGRjKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgX19pbnQxMjgpX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1cSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4KV9fYSwKKyAgICAodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfYWRkYyh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkY3VxKF9fYSwgX19iKTsKK30KKyNlbmRpZiAvLyBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisKKy8qIHZlY192YWRkY3V3ICovCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YWRkY3V3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1dyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY19hZGRzICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2JzKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2JzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdWJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzaHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hZGRzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1aHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1d3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2FkZHModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYWRkcyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworLyogdmVjX3ZhZGRzYnMgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzYnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFkZHNicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkc2JzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHNicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZhZGR1YnMgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFkZHVicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1YnModmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YWRkdWJzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1YnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZhZGRzaHMgKi8KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzaHModmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzaHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHNocyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFkZHNocyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc2hzKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCisvKiB2ZWNfdmFkZHVocyAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZhZGR1aHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHVocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdmFkZHVocyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192YWRkdWhzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1aHMoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192YWRkc3dzICovCisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHN3cyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRzd3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGRzd3ModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHN3cygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFkZHN3cyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkc3dzKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3ZhZGR1d3MgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkdXdzKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192YWRkdXdzKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGR1d3MoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhZGR1d3ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZHV3cyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZiBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisvKiB2ZWNfdmFkZHVxbSAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192YWRkdXFtKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZhZGR1cW0odmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19hICsgX19iOworfQorCisvKiB2ZWNfdmFkZGV1cW0gKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGV1cW0odmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZXVxbShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192YWRkZXVxbSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZhZGRldXFtKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdmFkZGN1cSAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192YWRkY3VxKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGN1cShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGN1cSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkY3VxKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZhZGRlY3VxICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZhZGRlY3VxKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmFkZGVjdXEoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdmFkZGVjdXEodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYiwKKyAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YWRkZWN1cShfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZiAvLyBkZWZpbmVkKF9fUE9XRVI4X1ZFQ1RPUl9fKSAmJiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisKKy8qIHZlY19hbmQgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192YW5kIHZlY19hbmQKKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19hbmQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfYW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfYW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmFuZCAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSAmIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3ZhbmQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW5kYyAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZhbmRjIHZlY19hbmRjCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2FuZGModmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfYW5kYyh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19hbmRjKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19hbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfdmFuZGMgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192YW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZhbmRjKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdmFuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZhbmRjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfdmFuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorI2VuZGlmCisKKy8qIHZlY19hdmcgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2F2Zyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZnc2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19hdmcodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3ViKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2F2Zyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192YXZnc2goX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zhdmd1aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfYXZnKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3N3KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19hdmcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3V3KF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZhdmdzYiAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YXZnc2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3NiKF9fYSwgX19iKTsKK30KKworLyogdmVjX3Zhdmd1YiAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Zhdmd1Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3ViKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZhdmdzaCAqLworCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YXZnc2godmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3NoKF9fYSwgX19iKTsKK30KKworLyogdmVjX3Zhdmd1aCAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192YXZndWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3VoKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZhdmdzdyAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmF2Z3N3KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3N3KF9fYSwgX19iKTsKK30KKworLyogdmVjX3Zhdmd1dyAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmF2Z3V3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmF2Z3V3KF9fYSwgX19iKTsKK30KKworLyogdmVjX2NlaWwgKi8KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2NlaWwodmVjdG9yIGZsb2F0IF9fYSkgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyc3BpcChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmlwKF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfY2VpbCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJkcGlwKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZyZmlwICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZmlwKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmlwKF9fYSk7Cit9CisKKy8qIHZlY19jbXBiICovCisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19jbXBiKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBiZnAoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmNtcGJmcCAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGJmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wYmZwKF9fYSwgX19iKTsKK30KKworLyogdmVjX2NtcGVxICovCisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfY21wZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWIoKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2NtcGVxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1YigodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2NtcGVxKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoKCh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGVxKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1dyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1dygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBlcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkKAorICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBlcSh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl92c3hfeHZjbXBlcXNwKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBlcSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3ZzeF94dmNtcGVxZHAoX19hLCBfX2IpOworfQorI2VuZGlmCisKKworLyogdmVjX2NtcGd0ICovCisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfY21wZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2goX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGd0KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19jbXBndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1dyhfX2EsIF9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfY21wZ3QodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fdnN4X3h2Y21wZ3RzcChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHZjbXBndGRwKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfY21wZ2UgKi8KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY21wZ2UgKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haQordmVjX2NtcGdlICh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfih2ZWNfY21wZ3QoX19iLCBfX2EpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGdlICh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSAodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfih2ZWNfY21wZ3QoX19iLCBfX2EpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSAodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfY21wZ2UgKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfih2ZWNfY21wZ3QoX19iLCBfX2EpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbXBnZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fdnN4X3h2Y21wZ2VzcChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ2UodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl92c3hfeHZjbXBnZWRwKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4odmVjX2NtcGd0KF9fYiwgX19hKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KHZlY19jbXBndChfX2IsIF9fYSkpOworfQorI2VuZGlmCisKKy8qIHZlY192Y21wZ2VmcCAqLworCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y21wZ2VmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndHNiICovCisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y21wZ3RzYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYihfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wZ3R1YiAqLworCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0dWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndHNoICovCisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0c2godmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndHVoICovCisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0dWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjbXBndHN3ICovCisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZjbXBndHN3KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzdyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y21wZ3R1dyAqLworCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y21wZ3R1dyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXcoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmNtcGd0ZnAgKi8KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmNtcGd0ZnAodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19jbXBsZSAqLworCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19jbXBsZSAodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfY21wbGUgKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfY21wbGUgKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haQordmVjX2NtcGxlICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcGxlICh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkKK3ZlY19jbXBsZSAodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haQordmVjX2NtcGxlKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NtcGxlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX2NtcGdlKF9fYiwgX19hKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBnZShfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ2UoX19iLCBfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19jbXBsdCAqLworCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2NtcGx0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2NtcGx0KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGx0KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfY21wbHQodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbXBsdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIHZlY19jbXBndChfX2IsIF9fYSk7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NtcGx0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfY21wZ3QoX19iLCBfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2NtcGx0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX2NtcGd0KF9fYiwgX19hKTsKK30KKworLyogdmVjX2NudGx6ICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19jbnRseih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6YihfX2EpOworfQorc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfY250bHoodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6YihfX2EpOworfQorc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbnRseih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemgoX19hKTsKK30KK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6aChfX2EpOworfQorc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfY250bHoodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2x6dyhfX2EpOworfQorc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsencoX19hKTsKK30KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbHpkKF9fYSk7Cit9CitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNsemQoX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfY3BzZ24gKi8KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19jcHNnbih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y3BzZ25zcChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfY3BzZ24odmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y3BzZ25kcChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2N0ZiAqLworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfY3RmKHZlY3RvciBpbnQgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2ZzeChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19jdGYodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjZnV4KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjZnN4ICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZjZnN4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y2ZzeChfX2EsIF9fYik7Cit9CisKKy8qIHZlY192Y2Z1eCAqLworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y2Z1eCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNmdXgoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfY3RzICovCisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19jdHModmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0c3hzKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZjdHN4cyAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmN0c3hzKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjdHN4cyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY19jdHUgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2N0dSh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y3R1eHMoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdmN0dXhzICovCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192Y3R1eHModmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmN0dXhzKF9fYSwgX19iKTsKK30KKworLyogdmVjX2RvdWJsZSAqLworCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19kb3VibGUgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICB2ZWN0b3IgZG91YmxlIF9fcmV0ID0geyBfX2FbMF0sIF9fYVsxXSB9OworICByZXR1cm4gX19yZXQ7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZG91YmxlICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICB2ZWN0b3IgZG91YmxlIF9fcmV0ID0geyBfX2FbMF0sIF9fYVsxXSB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworLyogdmVjX2RpdiAqLworCisvKiBJbnRlZ2VyIHZlY3RvciBkaXZpZGVzICh2ZWN0b3JzIGFyZSBzY2FsYXJpemVkLCBlbGVtZW50cyBkaXZpZGVkCisgICBhbmQgdGhlIHZlY3RvcnMgcmVhc3NlbWJsZWQpLgorKi8KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19kaXYodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19kaXYodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2Rpdih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19kaXYodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19kaXYodmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfZGl2KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2Rpdih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2Rpdih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfZGl2KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfZHNzICovCisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkgdmVjX2RzcyhpbnQgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX2RzcyhfX2EpOworfQorCisvKiB2ZWNfZHNzYWxsICovCisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkgdmVjX2Rzc2FsbCh2b2lkKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX2Rzc2FsbCgpOworfQorCisvKiB2ZWNfZHN0ICovCisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19kc3QoY29uc3Qgdm9pZCAqX19hLCBpbnQgX19iLCBpbnQgX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX2RzdChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX2RzdHN0ICovCisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19kc3RzdChjb25zdCB2b2lkICpfX2EsIGludCBfX2IsIGludCBfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfZHN0c3QoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19kc3RzdHQgKi8KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2RzdHN0dChjb25zdCB2b2lkICpfX2EsIGludCBfX2IsIGludCBfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfZHN0c3R0KF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfZHN0dCAqLworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfZHN0dChjb25zdCB2b2lkICpfX2EsIGludCBfX2IsIGludCBfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfZHN0dChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX2VxdiAqLworCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfZXF2KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfZXF2KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19lcXYodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3Igc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfZXF2KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHhsZXF2KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl92c3hfeHhsZXF2KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpCisgICAgX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19lcXYodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykKKyAgICBfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfZXF2KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpCisgICAgX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfZXF2KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX3ZzeF94eGxlcXYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX2Vxdih2ZWN0b3IgZG91YmxlIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fdnN4X3h4bGVxdigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19leHB0ZSAqLworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19leHB0ZSh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192ZXhwdGVmcChfX2EpOworfQorCisvKiB2ZWNfdmV4cHRlZnAgKi8KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmV4cHRlZnAodmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmV4cHRlZnAoX19hKTsKK30KKworLyogdmVjX2Zsb29yICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19mbG9vcih2ZWN0b3IgZmxvYXQgX19hKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGltKF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJmaW0oX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19mbG9vcih2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJkcGltKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZyZmltICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZmltKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmltKF9fYSk7Cit9CisKKy8qIHZlY19sZCAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sZChpbnQgX19hLCBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGQoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZ4ICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdngoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19sdngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2eChpbnQgX19hLCBjb25zdCB2ZWN0b3IgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY19sdngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZ4KGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4KF9fYSwgX19iKTsKK30KKworLyogdmVjX2xkZSAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbGRlKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZlYngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sZGUoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZGUoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdmVoeChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZGUoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdmVoeChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbGRlKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY19sdmV3eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbGRlKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGRlKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZlYnggKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2ZWJ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2ZWJ4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdmVieChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19sdmVoeCAqLworCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZlaHgoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdmVoeChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmVoeChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZlaHgoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbHZld3ggKi8KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdmV3eChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZld3goX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2x2ZXd4KGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdmV3eChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdmV3eChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2ZXd4KF9fYSwgX19iKTsKK30KKworLyogdmVjX2xkbCAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sZGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19sZGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciBwaXhlbCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCB2ZWN0b3IgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2xkbChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2xkbChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBib29sIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbGRsKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKKy8qIHZlY19sdnhsICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2eGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX2x2eGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY19sdnhsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfbHZ4bChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19sdnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZ4bChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX2x2eGwoX19hLCBfX2IpOworfQorCisvKiB2ZWNfbG9nZSAqLworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19sb2dlKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zsb2dlZnAoX19hKTsKK30KKworLyogdmVjX3Zsb2dlZnAgKi8KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdmxvZ2VmcCh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bG9nZWZwKF9fYSk7Cit9CisKKy8qIHZlY19sdnNsICovCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzbChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNsKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzbChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNsKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzbChfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2c2woaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c2woX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19sdnNyICovCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBzaWduZWQgY2hhciAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNyKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNyKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorICAgIF9fYXR0cmlidXRlX18oKF9fZGVwcmVjYXRlZF9fKCJ1c2UgYXNzaWdubWVudCBmb3IgdW5hbGlnbmVkIGxpdHRsZSBlbmRpYW4gXAorbG9hZHMvc3RvcmVzIikpKSB2ZWNfbHZzcihpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2RlcHJlY2F0ZWRfXygidXNlIGFzc2lnbm1lbnQgZm9yIHVuYWxpZ25lZCBsaXR0bGUgZW5kaWFuIFwKK2xvYWRzL3N0b3JlcyIpKSkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBtYXNrID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY19sdnNyKF9fYSwgX19iKTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmV2ZXJzZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsICA2LCAgNSwgIDQsICAzLCAgMiwgIDEsIDB9OworICByZXR1cm4gdmVjX3Blcm0obWFzaywgbWFzaywgcmV2ZXJzZSk7Cit9CisjZWxzZQorc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZzcihpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2sgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworICB2ZWN0b3IgdW5zaWduZWQgY2hhciByZXZlcnNlID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgMH07CisgIHJldHVybiB2ZWNfcGVybShtYXNrLCBtYXNrLCByZXZlcnNlKTsKK30KKyNlbHNlCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnNyKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCisgICAgX19hdHRyaWJ1dGVfXygoX19kZXByZWNhdGVkX18oInVzZSBhc3NpZ25tZW50IGZvciB1bmFsaWduZWQgbGl0dGxlIGVuZGlhbiBcCitsb2Fkcy9zdG9yZXMiKSkpIHZlY19sdnNyKGludCBfX2EsIGNvbnN0IGZsb2F0ICpfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFzayA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfbHZzcihfX2EsIF9fYik7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHJldmVyc2UgPSB7MTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgNiwgIDUsICA0LCAgMywgIDIsICAxLCAwfTsKKyAgcmV0dXJuIHZlY19wZXJtKG1hc2ssIG1hc2ssIHJldmVyc2UpOworfQorI2Vsc2UKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2c3IoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX2x2c3IoX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19tYWRkICovCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21sYWRkKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tYWRkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAgdmVjX21sYWRkKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tYWRkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gdmVjX21sYWRkKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIHZlY19tbGFkZChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19tYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiB2ZWNfbWxhZGQoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCit2ZWNfbWFkZCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLCB2ZWN0b3IgZmxvYXQgX19jKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm1hZGRhc3AoX19hLCBfX2IsIF9fYyk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1hZGRmcChfX2EsIF9fYiwgX19jKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfbWFkZCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWFkZGFkcChfX2EsIF9fYiwgX19jKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm1hZGRmcCAqLworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bWFkZGZwKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsIHZlY3RvciBmbG9hdCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYWRkZnAoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19tYWRkcyAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfbWFkZHModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWhhZGRzaHMoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bWhhZGRzaHMgKi8KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bWhhZGRzaHModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1oYWRkc2hzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfbXN1YiAqLworCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkKK3ZlY19tc3ViKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsIHZlY3RvciBmbG9hdCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtc3ViYXNwKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19tc3ViKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIGRvdWJsZSBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtc3ViYWRwKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmCisKKy8qIHZlY19tYXggKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzYihfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2goX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNoKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c3coX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1dygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHV3KF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNkKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX21heCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNkKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1ZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21heCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVkKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWQoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtYXhzcChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heGZwKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19tYXgodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm1heGRwKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm1heHNiICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bWF4c2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzYih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHNiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1heHNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2IoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qIHZlY192bWF4dWIgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1heHViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtYXh1Yih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bWF4dWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWIoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyogdmVjX3ZtYXhzaCAqLworCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1heHNoKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWF4c2godmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2goKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWF4c2godmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c2goX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192bWF4dWggKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHVoKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bWF4dWgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192bWF4dWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192bWF4c3cgKi8KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4c3codmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4c3coX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtYXhzdyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHN3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4c3codmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhzdyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWF4dXcgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4dXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1heHV3KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192bWF4dXcodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWF4dXcoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZtYXh1dyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXh1dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKy8qIHZlY192bWF4ZnAgKi8KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdm1heGZwKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWF4c3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtYXhmcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX21lcmdlaCAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDEwLCAweDAxLCAweDExLCAweDAyLCAweDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDEzLCAweDA0LCAweDE0LCAweDA1LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDE2LCAweDA3LCAweDE3KSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgxMCwgMHgwMSwgMHgxMSwgMHgwMiwgMHgxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgxMywgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgxNiwgMHgwNywgMHgxNykpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgxMCwgMHgwMSwgMHgxMSwgMHgwMiwgMHgxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgxMywgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgxNiwgMHgwNywgMHgxNykpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgxMCwgMHgxMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgxNCwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwNywgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWgodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19tZXJnZWgodmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIGRvdWJsZSlfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBkb3VibGUpX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm1yZ2hiICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm1yZ2hiIHZlY192bXJnaGIKKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtcmdoYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgxMCwgMHgwMSwgMHgxMSwgMHgwMiwgMHgxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgxMywgMHgwNCwgMHgxNCwgMHgwNSwgMHgxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgxNiwgMHgwNywgMHgxNykpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bXJnaGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192bXJnaGIodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MTAsIDB4MDEsIDB4MTEsIDB4MDIsIDB4MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMsIDB4MTMsIDB4MDQsIDB4MTQsIDB4MDUsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MTYsIDB4MDcsIDB4MTcpKTsKK30KKworLyogdmVjX3ZtcmdoaCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtcmdoaCB2ZWNfdm1yZ2hoCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bXJnaGgodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MTAsIDB4MTEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bXJnaGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MTAsIDB4MTEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2hoKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDEwLCAweDExLCAweDAyLCAweDAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDE0LCAweDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDA3LCAweDE2LCAweDE3KSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192bXJnaGgodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MTAsIDB4MTEsIDB4MDIsIDB4MDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MTQsIDB4MTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcpKTsKK30KKworLyogdmVjX3ZtcmdodyAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtcmdodyB2ZWNfdm1yZ2h3CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2h3KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192bXJnaHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTAsIDB4MTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Ztcmdodyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNykpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2h3KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDEwLCAweDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0LCAweDE1LCAweDE2LCAweDE3KSk7Cit9CisKKy8qIHZlY19tZXJnZWwgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgxOCwgMHgwOSwgMHgxOSwgMHgwQSwgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiwgMHgxQiwgMHgwQywgMHgxQywgMHgwRCwgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgxRSwgMHgwRiwgMHgxRikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgxOCwgMHgxOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgxQywgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgxOCwgMHgxOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgxQywgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgxOCwgMHgxOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgxQywgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19tZXJnZWwodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX21lcmdlbCh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4LCAwWDE5LCAweDFBLCAweDFCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOCwgMFgxOSwgMHgxQSwgMHgxQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCAodmVjdG9yIGRvdWJsZSlfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBkb3VibGUpX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsIDBYMTksIDB4MUEsIDB4MUIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdm1yZ2xiICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdm1yZ2xiIHZlY192bXJnbGIKKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtcmdsYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgxOCwgMHgwOSwgMHgxOSwgMHgwQSwgMHgxQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiwgMHgxQiwgMHgwQywgMHgxQywgMHgwRCwgMHgxRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRSwgMHgxRSwgMHgwRiwgMHgxRikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bXJnbGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192bXJnbGIodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MTgsIDB4MDksIDB4MTksIDB4MEEsIDB4MUEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIsIDB4MUIsIDB4MEMsIDB4MUMsIDB4MEQsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MUUsIDB4MEYsIDB4MUYpKTsKK30KKworLyogdmVjX3ZtcmdsaCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtcmdsaCB2ZWNfdm1yZ2xoCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bXJnbGgodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192bXJnbGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2xoKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDE4LCAweDE5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDFDLCAweDFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFLCAweDBGLCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192bXJnbGgodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MTgsIDB4MTksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MUMsIDB4MUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUsIDB4MEYsIDB4MUUsIDB4MUYpKTsKK30KKworLyogdmVjX3ZtcmdsdyAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtcmdsdyB2ZWNfdm1yZ2x3CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2x3KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192bXJnbHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MTgsIDB4MTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEsIDB4MUIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3Ztcmdsdyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgxOCwgMHgxOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQSwgMHgxQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdm1yZ2x3KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBLCAweDFCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CisKKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCisvKiB2ZWNfbWVyZ2VlICovCisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAgICAgICAgICAoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19tZXJnZWUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAgICAgICAgICAoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX21lcmdlZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAgICAgICAgICAoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywKKyAgICAgICAgICAgICAgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7Cit9CisKKy8qIHZlY19tZXJnZW8gKi8KKworc3RhdGljIHZlY3RvciBib29sIGludCAgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VvKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAgICAgICAgICAoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAgICAgICAgICAgICAgICAweDBDLCAweDBELCAweDBFLCAweDBGLCAweDFDLCAweDFELCAweDFFLCAweDFGKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCAgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VvKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKQorICAgICAgICAgICAgICAgICAgKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgICAgICAgICAgICAgICAgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCAgX19BVFRSU19vX2FpCit2ZWNfbWVyZ2VvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikKKyAgICAgICAgICAgICAgICAgICgweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAgICAgICAgICAgICAgIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKK30KKworI2VuZGlmCisKKy8qIHZlY19tZnZzY3IgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfbWZ2c2NyKHZvaWQpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX21mdnNjcigpOworfQorCisvKiB2ZWNfbWluICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNiKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNiKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2IoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNoKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zaChfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc3coKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnV3KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludXcoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX21pbih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51dyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNkKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zZCgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19taW4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zZChfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWQoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19taW4odmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51ZCgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVkKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bWluc3AoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5mcChfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfbWluKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZtaW5kcChfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX3ZtaW5zYiAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1pbnNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bWluc2IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zYigodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNiKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdm1pbnViICovCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZtaW51Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bWludWIodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm1pbnViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnViKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qIHZlY192bWluc2ggKi8KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtaW5zaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc2goX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1pbnNoKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1pbnNoKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnNoKF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCisvKiB2ZWNfdm1pbnVoICovCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1pbnVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdm1pbnVoKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1pbnVoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnVoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCisvKiB2ZWNfdm1pbnN3ICovCisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1pbnN3KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnN3KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192bWluc3codmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW5zdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1pbnN3KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluc3coX19hLCAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfdm1pbnV3ICovCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1pbnV3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaW51dyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm1pbnV3KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1pbnV3KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192bWludXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWludXcoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCisvKiB2ZWNfdm1pbmZwICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtaW5mcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm1pbnNwKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bWluZnAoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY19tbGFkZCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZtbGFkZHVobSB2ZWNfbWxhZGQKKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX21sYWRkKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWxhZGQodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqICh2ZWN0b3Igc2hvcnQpX19iICsgKHZlY3RvciBzaG9ydClfX2M7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworLyogdmVjX3ZtbGFkZHVobSAqLworCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1sYWRkdWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZtbGFkZHVobSh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNob3J0KV9fYiArICh2ZWN0b3Igc2hvcnQpX19jOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm1sYWRkdWhtKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZtbGFkZHVobSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKKy8qIHZlY19tcmFkZHMgKi8KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfbXJhZGRzKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsIHZlY3RvciBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtaHJhZGRzaHMoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bWhyYWRkc2hzICovCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtaHJhZGRzaHModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwgdmVjdG9yIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1ocmFkZHNocyhfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX21zdW0gKi8KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tc3VtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bW1ibShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19tc3VtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21zdW0odmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW1zaG0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbXN1bSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWhtKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdm1zdW1tYm0gKi8KKworc3RhdGljIHZlY3RvciBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3VtbWJtKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwgdmVjdG9yIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtbWJtKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdm1zdW11Ym0gKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3VtdWJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXVibShfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3Ztc3Vtc2htICovCisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXN1bXNobSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLCB2ZWN0b3IgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW1zaG0oX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bXN1bXVobSAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdm1zdW11aG0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW11aG0oX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19tc3VtcyAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX21zdW1zKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXN1bXNocyhfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19tc3Vtcyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm1zdW11aHMoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192bXN1bXNocyAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdm1zdW1zaHModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwgdmVjdG9yIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3Vtc2hzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfdm1zdW11aHMgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3Ztc3VtdWhzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Ztc3VtdWhzKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfbXR2c2NyICovCisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBzaG9ydCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIHBpeGVsIF9fYSkgeworICBfX2J1aWx0aW5fYWx0aXZlY19tdHZzY3IoKHZlY3RvciBpbnQpX19hKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19tdHZzY3IodmVjdG9yIGludCBfX2EpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfbXR2c2NyKCh2ZWN0b3IgaW50KV9fYSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfbXR2c2NyKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX210dnNjcih2ZWN0b3IgZmxvYXQgX19hKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX210dnNjcigodmVjdG9yIGludClfX2EpOworfQorCisvKiB2ZWNfbXVsICovCisKKy8qIEludGVnZXIgdmVjdG9yIG11bHRpcGxpY2F0aW9uIHdpbGwgaW52b2x2ZSBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgb2RkL2V2ZW4KKyAgIGVsZW1lbnRzIHNlcGFyYXRlbHksIHRoZW4gdHJ1bmNhdGluZyB0aGUgcmVzdWx0cyBhbmQgbW92aW5nIHRvIHRoZQorICAgcmVzdWx0IHZlY3Rvci4KKyovCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbXVsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbXVsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19tdWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbXVsKHZlY3RvciBzaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19tdWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX211bCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICogX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisjZW5kaWYKKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX211bCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19tdWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisjZW5kaWYKKworLyogVGhlIHZtdWxvcyogYW5kIHZtdWxlcyogaW5zdHJ1Y3Rpb25zIGhhdmUgYSBiaWcgZW5kaWFuIGJpYXMsIHNvCisgICB3ZSBtdXN0IHJldmVyc2UgdGhlIG1lYW5pbmcgb2YgImV2ZW4iIGFuZCAib2RkIiBmb3IgbGl0dGxlIGVuZGlhbi4gICovCisKKy8qIHZlY19tdWxlICovCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19tdWxlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2IoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2IoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3ViKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXViKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX211bGUodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NoKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNoKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX211bGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWgoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWgoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfbXVsZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3N3KF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXN3KF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3V3KF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXV3KF9fYSwgX19iKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192bXVsZXNiICovCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtdWxlc2IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NiKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNiKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdm11bGV1YiAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsZXViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvdWIoX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxldWIoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192bXVsZXNoICovCisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsZXNoKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zaChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzaChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3ZtdWxldWggKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZtdWxldWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3VoKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXVoKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfbXVsbyAqLworCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXNiKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3NiKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1YihfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91YihfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19tdWxvKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzaChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zaChfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19tdWxvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXVoKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3VoKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX211bG8odmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzdyhfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zdyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbXVsbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1dyhfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91dyhfX2EsIF9fYik7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfdm11bG9zYiAqLworCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsb3NiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGVzYihfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG9zYihfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3ZtdWxvdWIgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdm11bG91Yih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsZXViKF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bXVsb3ViKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdm11bG9zaCAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdm11bG9zaCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxlc2goX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZtdWxvc2goX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192bXVsb3VoICovCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bXVsb3VoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bGV1aChfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdm11bG91aChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogIHZlY19uYW5kICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7CisKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworCit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX25hbmQodmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19uYW5kKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hICYgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgJiBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19uYW5kKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbmFuZCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSAmIF9fYik7Cit9CisKKyNlbmRpZgorCisvKiB2ZWNfbm1hZGQgKi8KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCit2ZWNfbm1hZGQodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwgdmVjdG9yIGZsb2F0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm5tYWRkYXNwKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19ubWFkZCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2bm1hZGRhZHAoX19hLCBfX2IsIF9fYyk7Cit9CisjZW5kaWYKKworLyogdmVjX25tc3ViICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCit2ZWNfbm1zdWIodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwgdmVjdG9yIGZsb2F0IF9fYykgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZubXN1YmFzcChfX2EsIF9fYiwgX19jKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bm1zdWJmcChfX2EsIF9fYiwgX19jKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfbm1zdWIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgZG91YmxlIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dm5tc3ViYWRwKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmCisKKy8qIHZlY192bm1zdWJmcCAqLworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192bm1zdWJmcCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLCB2ZWN0b3IgZmxvYXQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192bm1zdWJmcChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX25vciAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Zub3IgdmVjX25vcgorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX25vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19ub3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICB+KCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfbm9yKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0KKyAgICAgIH4oKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fcmVzOworfQorI2VuZGlmCisKKy8qIHZlY192bm9yICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192bm9yKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zub3IodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdm5vcih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgfigodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfbm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfb3IgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192b3IgdmVjX29yCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfb3IodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19vcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX29yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorI2VuZGlmCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBzaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19vcmModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfb3JjKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19vcmModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX29yYyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfb3JjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX29yYyh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorI2VuZGlmCisKKy8qIHZlY192b3IgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdm9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIHwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3Zvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3Zvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdm9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgfCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIHwgX19iOworfQorI2VuZGlmCisKKy8qIHZlY19wYWNrICovCisKKy8qIFRoZSB2YXJpb3VzIHZlY3RvciBwYWNrIGluc3RydWN0aW9ucyBoYXZlIGEgYmlnLWVuZGlhbiBiaWFzLCBzbyBmb3IKKyAgIGxpdHRsZSBlbmRpYW4gd2UgbXVzdCBoYW5kbGUgcmV2ZXJzZWQgZWxlbWVudCBudW1iZXJpbmcuICAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGFjayh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMSwgMHgwMywgMHgwNSwgMHgwNywgMHgwOSwgMHgwQiwgMHgwRCwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHgxMywgMHgxNSwgMHgxNywgMHgxOSwgMHgxQiwgMHgxRCwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19wYWNrKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDEsIDB4MDMsIDB4MDUsIDB4MDcsIDB4MDksIDB4MEIsIDB4MEQsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MTMsIDB4MTUsIDB4MTcsIDB4MTksIDB4MUIsIDB4MUQsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcGFjayh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDA0LCAweDA1LCAweDA4LCAweDA5LCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDE0LCAweDE1LCAweDE4LCAweDE5LCAweDFDLCAweDFEKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDBBLCAweDBCLCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDFBLCAweDFCLCAweDFFLCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDQsIDB4MDUsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTQsIDB4MTUsIDB4MTgsIDB4MTksIDB4MUMsIDB4MUQpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MEEsIDB4MEIsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MUEsIDB4MUIsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wYWNrKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDQsIDB4MDUsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTQsIDB4MTUsIDB4MTgsIDB4MTksIDB4MUMsIDB4MUQpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19wYWNrKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFjayh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfcGFjayh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTgsIDB4MTksIDB4MUEsIDB4MUIpKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCisjZW5kaWYKKworLyogdmVjX3Zwa3VodW0gKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVtIHZlY192cGt1aHVtCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192cGt1aHVtKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAyLCAweDA0LCAweDA2LCAweDA4LCAweDBBLCAweDBDLCAweDBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDEyLCAweDE0LCAweDE2LCAweDE4LCAweDFBLCAweDFDLCAweDFFKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zwa3VodW0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAxLCAweDAzLCAweDA1LCAweDA3LCAweDA5LCAweDBCLCAweDBELCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExLCAweDEzLCAweDE1LCAweDE3LCAweDE5LCAweDFCLCAweDFELCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192cGt1aHVtKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwQSwgMHgwQywgMHgwRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgxRSkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDEsIDB4MDMsIDB4MDUsIDB4MDcsIDB4MDksIDB4MEIsIDB4MEQsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEsIDB4MTMsIDB4MTUsIDB4MTcsIDB4MTksIDB4MUIsIDB4MUQsIDB4MUYpKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnBrdXd1bSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dW0gdmVjX3Zwa3V3dW0KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zwa3V3dW0odmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwNCwgMHgwNSwgMHgwOCwgMHgwOSwgMHgwQywgMHgwRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxNCwgMHgxNSwgMHgxOCwgMHgxOSwgMHgxQywgMHgxRCkpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMiwgMHgwMywgMHgwNiwgMHgwNywgMHgwQSwgMHgwQiwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgxQSwgMHgxQiwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192cGt1d3VtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDA0LCAweDA1LCAweDA4LCAweDA5LCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDE0LCAweDE1LCAweDE4LCAweDE5LCAweDFDLCAweDFEKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAyLCAweDAzLCAweDA2LCAweDA3LCAweDBBLCAweDBCLCAweDBFLCAweDBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDFBLCAweDFCLCAweDFFLCAweDFGKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnBrdXd1bSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDA0LCAweDA1LCAweDA4LCAweDA5LCAweDBDLCAweDBELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDE0LCAweDE1LCAweDE4LCAweDE5LCAweDFDLCAweDFEKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MEEsIDB4MEIsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MUEsIDB4MUIsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnBrdWR1bSAqLworCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnBrdWR1bSB2ZWNfdnBrdWR1bQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zwa3VkdW0odmVjdG9yIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgaW50KXZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY192cGt1ZHVtKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA4LCAweDA5LCAweDBBLCAweDBCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE4LCAweDE5LCAweDFBLCAweDFCKSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192cGt1ZHVtKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpdmVjX3Blcm0oCisgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2EsICh2ZWN0b3IgbG9uZyBsb25nKV9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQikpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpdmVjX3Blcm0oCisgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2EsICh2ZWN0b3IgbG9uZyBsb25nKV9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxQywgMHgxRCwgMHgxRSwgMHgxRikpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3BhY2tweCAqLworCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19wYWNrcHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBrcHgoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnBrcHgoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192cGtweCAqLworCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cGtweCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192cGtweChfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192cGtweChfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3BhY2tzICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wYWNrcyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2hzcyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2hzcyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcGFja3ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19wYWNrcyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3dzcyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3dzcyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3V3dXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19wYWNrcyh2ZWN0b3IgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2RzcyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2RzcyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfcGFja3ModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3VkdXMoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3Zwa3Noc3MgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnBrc2hzcyh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Noc3MoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Noc3MoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192cGtzZHNzICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192cGtzZHNzKHZlY3RvciBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Nkc3MoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3Nkc3MoX19hLCBfX2IpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3Zwa3VodXMgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192cGt1aHVzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3VkdXMgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnBrdWR1cyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWR1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWR1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfdnBrc3dzcyAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnBrc3dzcyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3dzcyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3dzcyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3V3dXMgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnBrdXd1cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3BhY2tzdSAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wYWNrc3UodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NodXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NodXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWh1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3BhY2tzdSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3d1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc3d1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3BhY2tzdSh2ZWN0b3IgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBsb25nIGxvbmcgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NkdXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3NkdXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haQordmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWR1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdWR1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfdnBrc2h1cyAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192cGtzaHVzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2h1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2h1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQordmVjX3Zwa3NodXModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVzKF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cGt1aHVzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnBrc3d1cyAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnBrc3d1cyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3dXMoX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zwa3N3dXMoX19hLCBfX2IpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192cGtzd3VzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrdXd1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3Zwa3NkdXMgKi8KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Zwa3NkdXModmVjdG9yIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGxvbmcgbG9uZyBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2R1cyhfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnBrc2R1cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKiB2ZWNfcGVybSAqLworCisvLyBUaGUgdnBlcm0gaW5zdHJ1Y3Rpb24gaXMgZGVmaW5lZCBhcmNoaXRlY3R1cmFsbHkgd2l0aCBhIGJpZy1lbmRpYW4gYmlhcy4KKy8vIEZvciBsaXR0bGUgZW5kaWFuLCB3ZSBzd2FwIHRoZSBpbnB1dCBvcGVyYW5kcyBhbmQgaW52ZXJ0IHRoZSBwZXJtdXRlCisvLyBjb250cm9sIHZlY3Rvci4gIE9ubHkgdGhlIHJpZ2h0bW9zdCA1IGJpdHMgbWF0dGVyLCBzbyB3ZSBjb3VsZCB1c2UKKy8vIGEgdmVjdG9yIG9mIGFsbCAzMXMgaW5zdGVhZCBvZiBhbGwgMjU1cyB0byBwZXJmb3JtIHRoZSBpbnZlcnNpb24uCisvLyBIb3dldmVyLCB3aGVuIHRoZSBQQ1YgaXMgbm90IGEgY29uc3RhbnQsIHVzaW5nIDI1NSBoYXMgYW4gYWR2YW50YWdlCisvLyBpbiB0aGF0IHRoZSB2ZWNfeG9yIGNhbiBiZSByZWNvZ25pemVkIGFzIGEgdmVjX25vciAoYW5kIGZvciBQOCBhbmQKKy8vIGxhdGVyLCBwb3NzaWJseSBhIHZlY19uYW5kKS4KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYiwgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCisgICAgICAodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCisgICAgICAodmVjdG9yIGludClfX2IsICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Blcm0odmVjdG9yIHBpeGVsIF9fYSwgdmVjdG9yIHBpeGVsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKF9fYiwgX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koX19hLCBfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fZCA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgX19kID0gdmVjX3hvcihfX2MsIF9fZCk7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koKHZlY3RvciBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYiwgX19jKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19wZXJtKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCisgICAgICAodmVjdG9yIGludClfX2IsICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19iLCAodmVjdG9yIGludClfX2EsIF9fZCk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2FsdGl2ZWNfdnBlcm1fNHNpKAorICAgICAgKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IsIF9fYyk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19wZXJtKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2QgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX07CisgIF9fZCA9IHZlY194b3IoX19jLCBfX2QpOworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fYWx0aXZlY192cGVybV80c2koCisgICAgICAodmVjdG9yIGludClfX2IsICh2ZWN0b3IgaW50KV9fYSwgX19kKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgKKyAgICAgICh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfcGVybSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19kID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9OworICBfX2QgPSB2ZWNfeG9yKF9fYywgX19kKTsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19hLCBfX2QpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9hbHRpdmVjX3ZwZXJtXzRzaSgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iLCBfX2MpOworI2VuZGlmCit9CisjZW5kaWYKKworLyogdmVjX3ZwZXJtICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192cGVybSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3ZwZXJtKHZlY3RvciBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnBlcm0odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfdnBlcm0odmVjdG9yIGRvdWJsZSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBkb3VibGUgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmCisKKy8qIHZlY19yZSAqLworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQordmVjX3JlKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cmVzcChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZWZwKF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfcmUodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZWRwKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZyZWZwICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZWZwKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZWZwKF9fYSk7Cit9CisKKy8qIHZlY19ybCAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnJsYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19ybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192cmxiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19ybCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZybGgoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZybGgoKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfcmwodmVjdG9yIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmx3KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19ybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZybHcoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19ybCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmxkKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192cmxkKF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnJsYiAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnJsYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZybGIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnJsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZybGIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworLyogdmVjX3ZybGggKi8KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZybGgodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZybGgoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnJsaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192cmxoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnJsdyAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZybHcodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZybHcoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZybHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZybHcoKHZlY3RvciBpbnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfcm91bmQgKi8KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3JvdW5kKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNwaShfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZmluKF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfcm91bmQodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZyZHBpKF9fYSk7Cit9CisKKy8qIHZlY19yaW50ICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpCit2ZWNfcmludCh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNwaWMoX19hKTsKK30KKworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpCit2ZWNfcmludCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJkcGljKF9fYSk7Cit9CisKKy8qIHZlY19uZWFyYnlpbnQgKi8KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX25lYXJieWludCh2ZWN0b3IgZmxvYXQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNwaShfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX25lYXJieWludCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJkcGkoX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnJmaW4gKi8KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnJmaW4odmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJmaW4oX19hKTsKK30KKworLyogdmVjX3NxcnQgKi8KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zcXJ0KHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZzcXJ0c3AoX19hKTsKK30KKworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19zcXJ0KHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2c3FydGRwKF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3JzcXJ0ZSAqLworCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haQordmVjX3JzcXJ0ZSh2ZWN0b3IgZmxvYXQgX19hKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcXJ0ZXNwKF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJzcXJ0ZWZwKF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfcnNxcnRlKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2cnNxcnRlZHAoX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnJzcXJ0ZWZwICovCisKK3N0YXRpYyBfX3ZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnJzcXJ0ZWZwKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Zyc3FydGVmcChfX2EpOworfQorCisvKiB2ZWNfc2VsICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNlbF80c2kgdmVjX3NlbAorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKSB8IChfX2IgJiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgYm9vbCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBib29sIGNoYXIpX19jKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3Igc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIHNob3J0KV9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3Igc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIHNob3J0KV9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19jKSB8CisgICAgICAgICAoX19iICYgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgYm9vbCBzaG9ydClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBzaG9ydClfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgaW50KV9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGludClfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBib29sIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgYm9vbCBpbnQpX19jKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICB2ZWN0b3IgaW50IF9fcmVzID0gKCh2ZWN0b3IgaW50KV9fYSAmIH4odmVjdG9yIGludClfX2MpIHwKKyAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGludClfX2IgJiAodmVjdG9yIGludClfX2MpOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3NlbCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHZlY3RvciBpbnQgX19yZXMgPSAoKHZlY3RvciBpbnQpX19hICYgfih2ZWN0b3IgaW50KV9fYykgfAorICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgaW50KV9fYiAmICh2ZWN0b3IgaW50KV9fYyk7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY19zZWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYykgeworICB2ZWN0b3IgbG9uZyBsb25nIF9fcmVzID0gKCh2ZWN0b3IgbG9uZyBsb25nKV9fYSAmIH4odmVjdG9yIGxvbmcgbG9uZylfX2MpIHwKKyAgICAgICAgICAgICAgICAgICAgICgodmVjdG9yIGxvbmcgbG9uZylfX2IgJiAodmVjdG9yIGxvbmcgbG9uZylfX2MpOworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfc2VsKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHZlY3RvciBsb25nIGxvbmcgX19yZXMgPSAoKHZlY3RvciBsb25nIGxvbmcpX19hICYgfih2ZWN0b3IgbG9uZyBsb25nKV9fYykgfAorICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgbG9uZyBsb25nKV9fYiAmICh2ZWN0b3IgbG9uZyBsb25nKV9fYyk7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX3JlczsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNlbCAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBzaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3Igc2lnbmVkIGNoYXIpX19jKSB8IChfX2IgJiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MpIHwgKF9fYiAmICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgYm9vbCBjaGFyKV9fYykgfCAoX19iICYgKHZlY3RvciBib29sIGNoYXIpX19jKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+KHZlY3RvciBzaG9ydClfX2MpIHwgKF9fYiAmICh2ZWN0b3Igc2hvcnQpX19jKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHNob3J0KV9fYykgfCAoX19iICYgKHZlY3RvciBzaG9ydClfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYykgfAorICAgICAgICAgKF9fYiAmICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19jKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgc2hvcnQpX19jKSB8IChfX2IgJiAodmVjdG9yIGJvb2wgc2hvcnQpX19jKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfl9fYykgfCAoX19iICYgX19jKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgaW50KV9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGludClfX2MpIHwgKF9fYiAmICh2ZWN0b3IgaW50KV9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH5fX2MpIHwgKF9fYiAmIF9fYyk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoX19hICYgfih2ZWN0b3IgdW5zaWduZWQgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19jKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzZWwodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYSAmIH4odmVjdG9yIGJvb2wgaW50KV9fYykgfCAoX19iICYgKHZlY3RvciBib29sIGludClfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2MpIHsKKyAgcmV0dXJuIChfX2EgJiB+X19jKSB8IChfX2IgJiBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNlbCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgdmVjdG9yIGludCBfX3JlcyA9ICgodmVjdG9yIGludClfX2EgJiB+KHZlY3RvciBpbnQpX19jKSB8CisgICAgICAgICAgICAgICAgICAgICAoKHZlY3RvciBpbnQpX19iICYgKHZlY3RvciBpbnQpX19jKTsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c2VsKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHZlY3RvciBpbnQgX19yZXMgPSAoKHZlY3RvciBpbnQpX19hICYgfih2ZWN0b3IgaW50KV9fYykgfAorICAgICAgICAgICAgICAgICAgICAgKCh2ZWN0b3IgaW50KV9fYiAmICh2ZWN0b3IgaW50KV9fYyk7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisvKiB2ZWNfc2wgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgPDwgKHZlY3RvciBzaWduZWQgY2hhcilfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIDw8IF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIDw8ICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2wodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgPDwgX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NsKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIDw8ICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCBfX2I7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSA8PCAodmVjdG9yIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIDw8IF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNsYiAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzbGIgdmVjX3ZzbGIKKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzbGggKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c2xoIHZlY192c2xoCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2xoKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2woX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzbHcgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c2x3IHZlY192c2x3CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gdmVjX3NsKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c2x3KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2woX19hLCBfX2IpOworfQorCisvKiB2ZWNfc2xkICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNsZG9pXzRzaSB2ZWNfc2xkCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsZCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIHBpeGVsIF9fYSwgdmVjdG9yIHBpeGVsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xkKHZlY3RvciBzaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19zbGQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3NsZCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdnNsZG9pICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgdW5zaWduZWQgY2hhciBfX2QgPSBfX2MgJiAweDBGOworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19hLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNiAtIF9fZCwgMTcgLSBfX2QsIDE4IC0gX19kLCAxOSAtIF9fZCwgMjAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxIC0gX19kLCAyMiAtIF9fZCwgMjMgLSBfX2QsIDI0IC0gX19kLCAyNSAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYgLSBfX2QsIDI3IC0gX19kLCAyOCAtIF9fZCwgMjkgLSBfX2QsIDMwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSAtIF9fZCkpOworI2Vsc2UKKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19hLCBfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fZCwgX19kICsgMSwgX19kICsgMiwgX19kICsgMywgX19kICsgNCwgX19kICsgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgNiwgX19kICsgNywgX19kICsgOCwgX19kICsgOSwgX19kICsgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDExLCBfX2QgKyAxMiwgX19kICsgMTMsIF9fZCArIDE0LCBfX2QgKyAxNSkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbGRvaSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbGRvaSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYykgeworICB1bnNpZ25lZCBjaGFyIF9fZCA9IF9fYyAmIDB4MEY7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIHZlY19wZXJtKAorICAgICAgX19iLCBfX2EsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE2IC0gX19kLCAxNyAtIF9fZCwgMTggLSBfX2QsIDE5IC0gX19kLCAyMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEgLSBfX2QsIDIyIC0gX19kLCAyMyAtIF9fZCwgMjQgLSBfX2QsIDI1IC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNiAtIF9fZCwgMjcgLSBfX2QsIDI4IC0gX19kLCAyOSAtIF9fZCwgMzAgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxIC0gX19kKSk7CisjZWxzZQorICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2EsIF9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19kLCBfX2QgKyAxLCBfX2QgKyAyLCBfX2QgKyAzLCBfX2QgKyA0LCBfX2QgKyA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyA2LCBfX2QgKyA3LCBfX2QgKyA4LCBfX2QgKyA5LCBfX2QgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kICsgMTEsIF9fZCArIDEyLCBfX2QgKyAxMywgX19kICsgMTQsIF9fZCArIDE1KSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c2xkb2kodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNsZG9pKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHVuc2lnbmVkIGNoYXIgX19kID0gX19jICYgMHgwRjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gdmVjX3Blcm0oCisgICAgICBfX2IsIF9fYSwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTYgLSBfX2QsIDE3IC0gX19kLCAxOCAtIF9fZCwgMTkgLSBfX2QsIDIwIC0gX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMSAtIF9fZCwgMjIgLSBfX2QsIDIzIC0gX19kLCAyNCAtIF9fZCwgMjUgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2IC0gX19kLCAyNyAtIF9fZCwgMjggLSBfX2QsIDI5IC0gX19kLCAzMCAtIF9fZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgLSBfX2QpKTsKKyNlbHNlCisgIHJldHVybiB2ZWNfcGVybSgKKyAgICAgIF9fYSwgX19iLAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2QsIF9fZCArIDEsIF9fZCArIDIsIF9fZCArIDMsIF9fZCArIDQsIF9fZCArIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZCArIDYsIF9fZCArIDcsIF9fZCArIDgsIF9fZCArIDksIF9fZCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2QgKyAxMSwgX19kICsgMTIsIF9fZCArIDEzLCBfX2QgKyAxNCwgX19kICsgMTUpKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfc2xsICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xsKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192c2wgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbChfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbCgodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192c2wodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c2woKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3NsbyAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc2xvKHZlY3RvciBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c2xvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zbG8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Nsbyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY192c2xvICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c2xvKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNsbygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzbG8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnNsbyh2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3ZzbG8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX2J1aWx0aW5fYWx0aXZlY192c2xvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworLyogdmVjX3NwbGF0ICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiAmIDB4MEYpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iICYgMHgwRikpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IgJiAweDBGKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDA3KSAqIDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDE7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDcpICogMjsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSkpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwNykgKiAyOworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDA3KSAqIDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDE7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIwLCBiMSwgYjAsIGIxLCBiMCwgYjEpKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDMpICogNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMywgYjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxLCBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAzKSAqIDQ7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMsIGIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMykpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc3BsYXQodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMykgKiA0OworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDM7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzLCBiMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgYjAsIGIxLCBiMiwgYjMpKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDMpICogNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiMCwgYjEsIGIyLCBiMywgYjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxLCBiMiwgYjMsIGIwLCBiMSwgYjIsIGIzKSk7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3NwbGF0KHZlY3RvciBkb3VibGUgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBpbnQgX19iKSB7CisgIHVuc2lnbmVkIGNoYXIgYjAgPSAoX19iICYgMHgwMSkgKiA4OworICB1bnNpZ25lZCBjaGFyIGIxID0gYjAgKyAxLCBiMiA9IGIwICsgMiwgYjMgPSBiMCArIDMsIGI0ID0gYjAgKyA0LAorICAgICAgICAgICAgICAgIGI1ID0gYjAgKyA1LCBiNiA9IGIwICsgNiwgYjcgPSBiMCArIDc7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcpKTsKK30KK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY19zcGxhdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGludCBfX2IpIHsKKyAgdW5zaWduZWQgY2hhciBiMCA9IChfX2IgJiAweDAxKSAqIDg7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBiMCArIDEsIGIyID0gYjAgKyAyLCBiMyA9IGIwICsgMywgYjQgPSBiMCArIDQsCisgICAgICAgICAgICAgICAgYjUgPSBiMCArIDUsIGI2ID0gYjAgKyA2LCBiNyA9IGIwICsgNzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNykpOworfQorc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NwbGF0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDEpICogODsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzLCBiNCA9IGIwICsgNCwKKyAgICAgICAgICAgICAgICBiNSA9IGIwICsgNSwgYjYgPSBiMCArIDYsIGI3ID0gYjAgKyA3OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3KSk7Cit9CitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdW5zaWduZWQgY29uc3QgaW50IF9fYikgeworICB1bnNpZ25lZCBjaGFyIGIwID0gKF9fYiAmIDB4MDEpICogODsKKyAgdW5zaWduZWQgY2hhciBiMSA9IGIwICsgMSwgYjIgPSBiMCArIDIsIGIzID0gYjAgKyAzLCBiNCA9IGIwICsgNCwKKyAgICAgICAgICAgICAgICBiNSA9IGIwICsgNSwgYjYgPSBiMCArIDYsIGI3ID0gYjAgKyA3OworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjAsIGIxLCBiMiwgYjMsIGI0LCBiNSwgYjYsIGI3KSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZzcGx0YiAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcGx0YiB2ZWNfdnNwbHRiCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3BsdGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3BsdGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3BsdGIodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iKSk7Cit9CisKKy8qIHZlY192c3BsdGggKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3BsdGggdmVjX3ZzcGx0aAorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNwbHRoKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIF9fYiAqPSAyOworICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3BsdGgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgX19iICo9IDI7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEsIF9fYiwgYjEpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNwbHRoKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgeworICBfX2IgKj0gMjsKKyAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDE7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSwgX19iLCBiMSkpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNwbHRoKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIF9fYiAqPSAyOworICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMTsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxLCBfX2IsIGIxKSk7Cit9CisKKy8qIHZlY192c3BsdHcgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3BsdHcgdmVjX3ZzcGx0dworCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0dyh2ZWN0b3IgaW50IF9fYSwgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgX19iICo9IDQ7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxLCBiMiA9IF9fYiArIDIsIGIzID0gX19iICsgMzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IsIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMywgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3BsdHcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fYikgeworICBfX2IgKj0gNDsKKyAgdW5zaWduZWQgY2hhciBiMSA9IF9fYiArIDEsIGIyID0gX19iICsgMiwgYjMgPSBfX2IgKyAzOworICByZXR1cm4gdmVjX3Blcm0oX19hLCBfX2EsCisgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKF9fYiwgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMykpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNwbHR3KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIF9fYiAqPSA0OworICB1bnNpZ25lZCBjaGFyIGIxID0gX19iICsgMSwgYjIgPSBfX2IgKyAyLCBiMyA9IF9fYiArIDM7CisgIHJldHVybiB2ZWNfcGVybShfX2EsIF9fYSwKKyAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoX19iLCBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjEsIGIyLCBiMywgX19iLCBiMSwgYjIsIGIzKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c3BsdHcodmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgX19iICo9IDQ7CisgIHVuc2lnbmVkIGNoYXIgYjEgPSBfX2IgKyAxLCBiMiA9IF9fYiArIDIsIGIzID0gX19iICsgMzsKKyAgcmV0dXJuIHZlY19wZXJtKF9fYSwgX19hLAorICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2IsIGIxLCBiMiwgYjMsIF9fYiwgYjEsIGIyLCBiMywgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSwgYjIsIGIzLCBfX2IsIGIxLCBiMiwgYjMpKTsKK30KKworLyogdmVjX3NwbGF0X3M4ICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNwbHRpc2IgdmVjX3NwbGF0X3M4CisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcGxhdF9zOChzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpKF9fYSk7Cit9CisKKy8qIHZlY192c3BsdGlzYiAqLworCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNwbHRpc2Ioc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKShfX2EpOworfQorCisvKiB2ZWNfc3BsYXRfczE2ICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNwbHRpc2ggdmVjX3NwbGF0X3MxNgorCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRfczE2KHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaG9ydCkoX19hKTsKK30KKworLyogdmVjX3ZzcGx0aXNoICovCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3BsdGlzaChzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpKF9fYSk7Cit9CisKKy8qIHZlY19zcGxhdF9zMzIgKi8KKworI2RlZmluZSBfX2J1aWx0aW5fYWx0aXZlY192c3BsdGlzdyB2ZWNfc3BsYXRfczMyCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRfczMyKHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBpbnQpKF9fYSk7Cit9CisKKy8qIHZlY192c3BsdGlzdyAqLworCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcGx0aXN3KHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciBpbnQpKF9fYSk7Cit9CisKKy8qIHZlY19zcGxhdF91OCAqLworCisvLyBGSVhNRTogcGFyYW1ldGVyIHNob3VsZCBiZSB0cmVhdGVkIGFzIDUtYml0IHNpZ25lZCBsaXRlcmFsCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcGxhdF91OCh1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2EpOworfQorCisvKiB2ZWNfc3BsYXRfdTE2ICovCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcGxhdF91MTYoc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KShfX2EpOworfQorCisvKiB2ZWNfc3BsYXRfdTMyICovCisKKy8vIEZJWE1FOiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgNS1iaXQgc2lnbmVkIGxpdGVyYWwKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRfdTMyKHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpKF9fYSk7Cit9CisKKy8qIHZlY19zciAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hID4+IF9fYjsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NyKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hID4+IF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hID4+IF9fYjsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgPj4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zcih2ZWN0b3Igc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hID4+IF9fYjsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiBfX2I7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NyKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSA+PiBfX2I7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NyKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hID4+IF9fYjsKK30KKyNlbmRpZgorCisvKiB2ZWNfdnNyYiAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmIgdmVjX3ZzcmIKKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzcmIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hID4+ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3JiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgPj4gX19iOworfQorCisvKiB2ZWNfdnNyaCAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmggdmVjX3ZzcmgKKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzcmgodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzcmgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiBfX2I7Cit9CisKKy8qIHZlY192c3J3ICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnNydyB2ZWNfdnNydworCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzcncodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSA+PiAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNydyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hID4+IF9fYjsKK30KKworLyogdmVjX3NyYSAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3JhKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JhYigodmVjdG9yIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcmEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFiKCh2ZWN0b3IgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcmEodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnNyYWgoX19hLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcmEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JhaCgodmVjdG9yIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcmEodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnNyYXcoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NyYSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JhdygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NyYSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgPj4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zcmEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSA+PiBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY192c3JhYiAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyYWIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyYWIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyYWIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyYWIoKHZlY3RvciBjaGFyKV9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzcmFoICovCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3JhaCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFoKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyYWgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmFoKCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnNyYXcgKi8KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3Jhdyh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzcmF3KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3Jhdyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcmF3KCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworLyogdmVjX3NybCAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGludCBfX0FUVFJTX29fYWkgdmVjX3NybCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JsKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfdnNyICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcihfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcihfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3IoKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3ZzcigodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnNyKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY192c3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNyKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY19zcm8gKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciBwaXhlbCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgcGl4ZWwpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgcGl4ZWwgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHBpeGVsKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Nybyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19idWlsdGluX2FsdGl2ZWNfdnNybyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc3JvKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY19zcm8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLCAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfdnNybyAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfdnNybyh2ZWN0b3IgcGl4ZWwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHBpeGVsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBwaXhlbClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Zzcm8oKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fYWx0aXZlY192c3JvKCh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Zzcm8odmVjdG9yIGZsb2F0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19BVFRSU19vX2FpIHZlY192c3JvKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19idWlsdGluX2FsdGl2ZWNfdnNybygodmVjdG9yIGludClfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKKy8qIHZlY19zdCAqLworCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsIHZlY3RvciBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgdmVjdG9yIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3QodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3R2eCAqLworCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGludCBfX2EsIGludCBfX2IsIHZlY3RvciBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dngoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dngodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwgZmxvYXQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3RlICovCisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWh4KCh2ZWN0b3Igc2hvcnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RlKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGUodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0ZSh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLCBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0dmVieCAqLworCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVieCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlYngoKHZlY3RvciBjaGFyKV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVieCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZWJ4KCh2ZWN0b3IgY2hhcilfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlYngodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWJ4KHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVieCgodmVjdG9yIGNoYXIpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZlaHggKi8KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZlaHgodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2ZWh4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmVoeCgodmVjdG9yIHNob3J0KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmVoeCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZlaHgoKHZlY3RvciBzaG9ydClfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0dmV3eCAqLworCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmV3eCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmV3eCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZld3godmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmV3eCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2ZXd4KCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmV3eCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLCBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dmV3eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworLyogdmVjX3N0bCAqLworCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLCB2ZWN0b3Igc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCB2ZWN0b3IgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdGwodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwgdmVjdG9yIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3RsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZ4bCAqLworCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwgc2hvcnQgKl9fYykgeworICBfX2J1aWx0aW5fYWx0aXZlY19zdHZ4bCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZ4bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCB2ZWN0b3IgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2eGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl9hbHRpdmVjX3N0dnhsKCh2ZWN0b3IgaW50KV9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnhsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsIGZsb2F0ICpfX2MpIHsKKyAgX19idWlsdGluX2FsdGl2ZWNfc3R2eGwoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdWIgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWIodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNob3J0KV9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBpbnQpX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciBpbnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haSB2ZWNfc3ViKHZlY3RvciBzaWduZWQgX19pbnQxMjggX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorI2VuZGlmIC8vIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfc3ViKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY19zdWIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisjZW5kaWYKKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3N1Yih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKKy8qIHZlY192c3VidWJtICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnN1YnVibSB2ZWNfdnN1YnVibQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnVibSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnVibSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnVibSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3VidWJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1Ym0odmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnVibSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCisvKiB2ZWNfdnN1YnVobSAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1aG0gdmVjX3ZzdWJ1aG0KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1aG0odmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1aG0odmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3VidWhtKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1aG0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1aG0odmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSAtIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1aG0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKKy8qIHZlY192c3VidXdtICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3bSB2ZWNfdnN1YnV3bQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d20odmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnV3bSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGludClfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnV3bSh2ZWN0b3IgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgLSAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnV3bSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d20odmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIC0gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d20odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIC0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCisvKiB2ZWNfdnN1YmZwICovCisKKyNkZWZpbmUgX19idWlsdGluX2FsdGl2ZWNfdnN1YmZwIHZlY192c3ViZnAKKworc3RhdGljIHZlY3RvciBmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnN1YmZwKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworLyogdmVjX3N1YmMgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zdWJjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3V3KF9fYSwgX19iKTsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfc3ViYyh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3VxKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfc3ViYyh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJjdXEoX19hLCBfX2IpOworfQorI2VuZGlmIC8vIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKworLyogdmVjX3ZzdWJjdXcgKi8KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZzdWJjdXcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3V3KF9fYSwgX19iKTsKK30KKworLyogdmVjX3N1YnMgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1YnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWhzKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3N1YnModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cygodmVjdG9yIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cyhfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3Vicyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidXdzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zdWJzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoX19hLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCisvKiB2ZWNfdnN1YnNicyAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnNicyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3Vic2JzKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJzYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic2JzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdnN1YnVicyAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192c3VidWJzKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnN1YnVicyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1YnModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVicyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKiB2ZWNfdnN1YnNocyAqLworCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnN1YnNocyh2ZWN0b3Igc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnNocyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3Vic2hzKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoKHZlY3RvciBzaG9ydClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192c3Vic2hzKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzaHMoX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKKy8qIHZlY192c3VidWhzICovCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCit2ZWNfdnN1YnVocyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidWhzKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY192c3VidWhzKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1aHModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnVocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworLyogdmVjX3ZzdWJzd3MgKi8KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3Vic3dzKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnN3cyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnN3cyh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vic3dzKCh2ZWN0b3IgaW50KV9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192c3Vic3dzKHZlY3RvciBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJzd3MoX19hLCAodmVjdG9yIGludClfX2IpOworfQorCisvKiB2ZWNfdnN1YnV3cyAqLworCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d3ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJ1d3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3ZzdWJ1d3ModmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YnV3cygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN1YnV3cyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VidXdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKy8qIHZlY192c3VidXFtICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJ1cW0odmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdnN1YnVxbSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKKy8qIHZlY192c3ViZXVxbSAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192c3ViZXVxbSh2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fYSwgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJldXFtKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJldXFtKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1YmV1cW0oX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY192c3ViY3VxICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3ZzdWJjdXEodmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViY3VxKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192c3ViY3VxKHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJjdXEoX19hLCBfX2IpOworfQorCisvKiB2ZWNfdnN1YmVjdXEgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19BVFRSU19vX2FpCit2ZWNfdnN1YmVjdXEodmVjdG9yIHNpZ25lZCBfX2ludDEyOCBfX2EsIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgX19pbnQxMjggX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3ViZWN1cShfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX0FUVFJTX29fYWkKK3ZlY192c3ViZWN1cSh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19iLAorICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBfX2ludDEyOCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdWJlY3VxKF9fYSwgX19iLCBfX2MpOworfQorI2VuZGlmIC8vIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKworLyogdmVjX3N1bTRzICovCisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3VtNHModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW00c2JzKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19zdW00cyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHVicyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3VtNHModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHNocyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY192c3VtNHNicyAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnN1bTRzYnModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW00c2JzKF9fYSwgX19iKTsKK30KKworLyogdmVjX3ZzdW00dWJzICovCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192c3VtNHVicyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHVicyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY192c3VtNHNocyAqLworCitzdGF0aWMgdmVjdG9yIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfdnN1bTRzaHModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtNHNocyhfX2EsIF9fYik7Cit9CisKKy8qIHZlY19zdW0ycyAqLworCisvKiBUaGUgdnN1bTJzd3MgaW5zdHJ1Y3Rpb24gaGFzIGEgYmlnLWVuZGlhbiBiaWFzLCBzbyB0aGF0IHRoZSBzZWNvbmQKKyAgIGlucHV0IHZlY3RvciBhbmQgdGhlIHJlc3VsdCBhbHdheXMgcmVmZXJlbmNlIGJpZy1lbmRpYW4gZWxlbWVudHMKKyAgIDEgYW5kIDMgKGxpdHRsZS1lbmRpYW4gZWxlbWVudCAwIGFuZCAyKS4gIEZvciBlYXNlIG9mIHBvcnRpbmcgdGhlCisgICBwcm9ncmFtbWVyIHdhbnRzIGVsZW1lbnRzIDEgYW5kIDMgaW4gYm90aCBjYXNlcywgc28gZm9yIGxpdHRsZQorICAgZW5kaWFuIHdlIG11c3QgcGVyZm9ybSBzb21lIHBlcm11dGVzLiAgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19zdW0ycyh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICB2ZWN0b3IgaW50IF9fYyA9ICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYiwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDQsIDUsIDYsIDcsIDAsIDEsIDIsIDMsIDEyLCAxMywgMTQsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExKSk7CisgIF9fYyA9IF9fYnVpbHRpbl9hbHRpdmVjX3ZzdW0yc3dzKF9fYSwgX19jKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfcGVybSgKKyAgICAgIF9fYywgX19jLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDQsIDUsIDYsIDcsIDAsIDEsIDIsIDMsIDEyLCAxMywgMTQsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOSwgMTAsIDExKSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bTJzd3MoX19hLCBfX2IpOworI2VuZGlmCit9CisKKy8qIHZlY192c3VtMnN3cyAqLworCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZzdW0yc3dzKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHZlY3RvciBpbnQgX19jID0gKHZlY3RvciBzaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19iLCBfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoNCwgNSwgNiwgNywgMCwgMSwgMiwgMywgMTIsIDEzLCAxNCwgMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCA5LCAxMCwgMTEpKTsKKyAgX19jID0gX19idWlsdGluX2FsdGl2ZWNfdnN1bTJzd3MoX19hLCBfX2MpOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KXZlY19wZXJtKAorICAgICAgX19jLCBfX2MsICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoNCwgNSwgNiwgNywgMCwgMSwgMiwgMywgMTIsIDEzLCAxNCwgMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCA5LCAxMCwgMTEpKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3VtMnN3cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3N1bXMgKi8KKworLyogVGhlIHZzdW1zd3MgaW5zdHJ1Y3Rpb24gaGFzIGEgYmlnLWVuZGlhbiBiaWFzLCBzbyB0aGF0IHRoZSBzZWNvbmQKKyAgIGlucHV0IHZlY3RvciBhbmQgdGhlIHJlc3VsdCBhbHdheXMgcmVmZXJlbmNlIGJpZy1lbmRpYW4gZWxlbWVudCAzCisgICAobGl0dGxlLWVuZGlhbiBlbGVtZW50IDApLiAgRm9yIGVhc2Ugb2YgcG9ydGluZyB0aGUgcHJvZ3JhbW1lcgorICAgd2FudHMgZWxlbWVudCAzIGluIGJvdGggY2FzZXMsIHNvIGZvciBsaXR0bGUgZW5kaWFuIHdlIG11c3QgcGVyZm9ybQorICAgc29tZSBwZXJtdXRlcy4gICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfc3Vtcyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIF9fYiA9ICh2ZWN0b3Igc2lnbmVkIGludCl2ZWNfc3BsYXQoX19iLCAzKTsKKyAgX19iID0gX19idWlsdGluX2FsdGl2ZWNfdnN1bXN3cyhfX2EsIF9fYik7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpKDAsIDAsIDAsIF9fYlswXSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnN1bXN3cyhfX2EsIF9fYik7CisjZW5kaWYKK30KKworLyogdmVjX3ZzdW1zd3MgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY192c3Vtc3dzKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgX19iID0gKHZlY3RvciBzaWduZWQgaW50KXZlY19zcGxhdChfX2IsIDMpOworICBfX2IgPSBfX2J1aWx0aW5fYWx0aXZlY192c3Vtc3dzKF9fYSwgX19iKTsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkoMCwgMCwgMCwgX19iWzBdKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192c3Vtc3dzKF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisvKiB2ZWNfdHJ1bmMgKi8KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkKK3ZlY190cnVuYyh2ZWN0b3IgZmxvYXQgX19hKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJzcGl6KF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnJmaXooX19hKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBkb3VibGUgX19BVFRSU19vX2FpIHZlY190cnVuYyh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dnJkcGl6KF9fYSk7Cit9CisjZW5kaWYKKworLyogdmVjX3ZyZml6ICovCisKK3N0YXRpYyB2ZWN0b3IgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX3ZyZml6KHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZyZml6KF9fYSk7Cit9CisKKy8qIHZlY191bnBhY2toICovCisKKy8qIFRoZSB2ZWN0b3IgdW5wYWNrIGluc3RydWN0aW9ucyBhbGwgaGF2ZSBhIGJpZy1lbmRpYW4gYmlhcywgc28gZm9yCisgICBsaXR0bGUgZW5kaWFuIHdlIG11c3QgcmV2ZXJzZSB0aGUgbWVhbmluZ3Mgb2YgImhpZ2giIGFuZCAibG93LiIgICovCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY191bnBhY2toKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3VucGFja2godmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY191bnBhY2toKHZlY3RvciBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzaChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNraCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNraCh2ZWN0b3IgcGl4ZWwgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtscHgoKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtocHgoKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY191bnBhY2toKHZlY3RvciBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3VucGFja2godmVjdG9yIGJvb2wgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192dXBraHNiICovCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192dXBraHNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z1cGtoc2IodmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworLyogdmVjX3Z1cGtoc2ggKi8KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192dXBraHNoKHZlY3RvciBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2xzaChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnVwa2hzaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2goKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnVwa2hzaCh2ZWN0b3IgcGl4ZWwgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtscHgoKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtocHgoKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKKy8qIHZlY192dXBraHN3ICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192dXBraHN3KHZlY3RvciBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBraHN3KF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3Z1cGtoc3codmVjdG9yIGJvb2wgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY191bnBhY2tsICovCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY191bnBhY2tsKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3VucGFja2wodmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY191bnBhY2tsKHZlY3RvciBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNrbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdW5wYWNrbCh2ZWN0b3IgcGl4ZWwgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtocHgoKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtscHgoKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY191bnBhY2tsKHZlY3RvciBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3VucGFja2wodmVjdG9yIGJvb2wgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192dXBrbHNiICovCisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192dXBrbHNiKHZlY3RvciBzaWduZWQgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzYigodmVjdG9yIGNoYXIpX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHNiKCh2ZWN0b3IgY2hhcilfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z1cGtsc2IodmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZWxzZQorICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2IoKHZlY3RvciBjaGFyKV9fYSk7CisjZW5kaWYKK30KKworLyogdmVjX3Z1cGtsc2ggKi8KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192dXBrbHNoKHZlY3RvciBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdnVwa2hzaChfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goX19hKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnVwa2xzaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EpIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fYWx0aXZlY192dXBraHNoKCh2ZWN0b3Igc2hvcnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc2goKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnVwa2xzaCh2ZWN0b3IgcGl4ZWwgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtocHgoKHZlY3RvciBzaG9ydClfX2EpOworI2Vsc2UKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtscHgoKHZlY3RvciBzaG9ydClfX2EpOworI2VuZGlmCit9CisKKy8qIHZlY192dXBrbHN3ICovCisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIHZlY3RvciBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192dXBrbHN3KHZlY3RvciBpbnQgX19hKSB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192dXBrbHN3KF9fYSk7CisjZW5kaWYKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3Z1cGtsc3codmVjdG9yIGJvb2wgaW50IF9fYSkgeworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtoc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbHNlCisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX3Z1cGtsc3coKHZlY3RvciBpbnQpX19hKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qIHZlY192c3hfbGQgKi8KKworI2lmZGVmIF9fVlNYX18KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnN4X2xkKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3ZzeF9seHZ3NHgoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnN4X2xkKGludCBfX2EsIGNvbnN0IHZlY3RvciBmbG9hdCAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fYnVpbHRpbl92c3hfbHh2dzR4KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3ZzeF9sZChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3ZzeF9seHZkMngoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192c3hfbGQoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fdnN4X2x4dmQyeChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfdnN4X2xkKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgZG91YmxlICpfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl92c3hfbHh2ZDJ4KF9fYSwgX19iKTsKK30KKworI2VuZGlmCisKKy8qIHZlY192c3hfc3QgKi8KKworI2lmZGVmIF9fVlNYX18KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZ3NHgoKHZlY3RvciBpbnQpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dnc0eCgodmVjdG9yIGludClfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgKl9fYykgeworICBfX2J1aWx0aW5fdnN4X3N0eHZkMngoKHZlY3RvciBkb3VibGUpX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfdnN4X3N0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyAqX19jKSB7CisgIF9fYnVpbHRpbl92c3hfc3R4dmQyeCgodmVjdG9yIGRvdWJsZSlfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY192c3hfc3QodmVjdG9yIGRvdWJsZSBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlICpfX2MpIHsKKyAgX19idWlsdGluX3ZzeF9zdHh2ZDJ4KCh2ZWN0b3IgZG91YmxlKV9fYSwgX19iLCBfX2MpOworfQorCisjZW5kaWYKKworLyogdmVjX3hvciAqLworCisjZGVmaW5lIF9fYnVpbHRpbl9hbHRpdmVjX3Z4b3IgdmVjX3hvcgorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHNob3J0KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgc2hvcnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgaW50KV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBpbnQgX19BVFRSU19vX2FpIHZlY194b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBmbG9hdCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfeG9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfeG9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX3hvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haQordmVjX3hvcih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgXgorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKSBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkKK3ZlY194b3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgXgorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX3Z4b3IgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaG9ydClfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeICh2ZWN0b3Igc2hvcnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgaW50KV9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBpbnQgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIGludClfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPQorICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hIF4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iOworICByZXR1cm4gKHZlY3RvciBmbG9hdClfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Z4b3IodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3JlcyA9CisgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIGZsb2F0KV9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfdnhvcih2ZWN0b3IgZmxvYXQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fcmVzID0KKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSBeICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgZmxvYXQpX19yZXM7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EgXiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hIF4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfdnhvcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIF4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192eG9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19BVFRSU19vX2FpIHZlY192eG9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGV4dGVuc2lvbnMgZm9yIENCRUEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogdmVjX2V4dHJhY3QgKi8KKworc3RhdGljIHNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIHNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgdmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICByZXR1cm4gX19hW19fYl07Cit9CisKK3N0YXRpYyBkb3VibGUgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBkb3VibGUgX19hLCBpbnQgX19iKSB7CisgIHJldHVybiBfX2FbX19iXTsKK30KKyNlbmRpZgorCitzdGF0aWMgZmxvYXQgX19BVFRSU19vX2FpIHZlY19leHRyYWN0KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYVtfX2JdOworfQorCisvKiB2ZWNfaW5zZXJ0ICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19pbnNlcnQoc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19pbnNlcnQodW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2luc2VydChzaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2luc2VydCh1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jKSB7CisgIF9fYltfX2NdID0gX19hOworICByZXR1cm4gX19iOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCit2ZWNfaW5zZXJ0KHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpIHsKKyAgX19iW19fY10gPSBfX2E7CisgIHJldHVybiBfX2I7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX2luc2VydCh1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworc3RhdGljIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY19pbnNlcnQodW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYiwgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KK3N0YXRpYyB2ZWN0b3IgZG91YmxlIF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKyNlbmRpZgorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfaW5zZXJ0KGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYykgeworICBfX2JbX19jXSA9IF9fYTsKKyAgcmV0dXJuIF9fYjsKK30KKworLyogdmVjX2x2bHggKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBzaG9ydCkoMCksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGJvb2wgc2hvcnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLCBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBwaXhlbCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciBpbnQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdmVjdG9yIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGludCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIHVuc2lnbmVkIGludCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdmx4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZseChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGQoX19hLCBfX2IpLCAodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2bHgoaW50IF9fYSwgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZChfX2EsIF9fYiksICh2ZWN0b3IgZmxvYXQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCisvKiB2ZWNfbHZseGwgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGJvb2wgY2hhcikoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBzaG9ydCkoMCksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdmx4bChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3Igc2hvcnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBib29sIHNob3J0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBwaXhlbCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBwaXhlbCkoMCksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGludCkoMCksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2x2bHhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSh2ZWNfbGRsKF9fYSwgX19iKSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgYm9vbCBpbnQpKDApLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0odmVjX2xkbChfX2EsIF9fYiksICh2ZWN0b3IgZmxvYXQpKDApLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZseGwoaW50IF9fYSwgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKHZlY19sZGwoX19hLCBfX2IpLCAodmVjdG9yIGZsb2F0KSgwKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworLyogdmVjX2x2cnggKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3Igc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNpZ25lZCBjaGFyKSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpCit2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgYm9vbCBjaGFyKSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwgY29uc3Qgc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaG9ydCkoMCksIHZlY19sZChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHZlY3RvciBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNob3J0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgc2hvcnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHBpeGVsIF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLCBjb25zdCB2ZWN0b3IgcGl4ZWwgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBwaXhlbCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLCBjb25zdCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBpbnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGludCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGludCkoMCksIHZlY19sZChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4KGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciB1bnNpZ25lZCBpbnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjdG9yIGJvb2wgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgYm9vbCBpbnQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZyeChpbnQgX19hLCBjb25zdCBmbG9hdCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGZsb2F0KSgwKSwgdmVjX2xkKF9fYSwgX19iKSwgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX2x2cngoaW50IF9fYSwgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgZmxvYXQpKDApLCB2ZWNfbGQoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCisvKiB2ZWNfbHZyeGwgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgY2hhcikoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaWduZWQgY2hhcikoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK3ZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBib29sIGNoYXIgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgYm9vbCBjaGFyKSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLCBjb25zdCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3Igc2hvcnQgX19BVFRSU19vX2FpIHZlY19sdnJ4bChpbnQgX19hLCBjb25zdCB2ZWN0b3Igc2hvcnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBzaG9ydCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQordmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgYm9vbCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGJvb2wgc2hvcnQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciBwaXhlbCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsIGNvbnN0IHZlY3RvciBwaXhlbCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHBpeGVsKSgwKSwgdmVjX2xkbChfX2EsIF9fYiksCisgICAgICAgICAgICAgICAgICB2ZWNfbHZzbChfX2EsICh1bnNpZ25lZCBjaGFyICopX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgaW50ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgaW50KSgwKSwgdmVjX2xkbChfX2EsIF9fYiksIHZlY19sdnNsKF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIGludCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkgdmVjX2x2cnhsKGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGludCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCBfX2IpKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpCit2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqX19iKSB7CisgIHJldHVybiB2ZWNfcGVybSgodmVjdG9yIHVuc2lnbmVkIGludCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGJvb2wgaW50IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBib29sIGludCkoMCksIHZlY19sZGwoX19hLCBfX2IpLAorICAgICAgICAgICAgICAgICAgdmVjX2x2c2woX19hLCAodW5zaWduZWQgY2hhciAqKV9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgZmxvYXQgKl9fYikgeworICByZXR1cm4gdmVjX3Blcm0oKHZlY3RvciBmbG9hdCkoMCksIHZlY19sZGwoX19hLCBfX2IpLCB2ZWNfbHZzbChfX2EsIF9fYikpOworfQorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfbHZyeGwoaW50IF9fYSwgY29uc3QgdmVjdG9yIGZsb2F0ICpfX2IpIHsKKyAgcmV0dXJuIHZlY19wZXJtKCh2ZWN0b3IgZmxvYXQpKDApLCB2ZWNfbGRsKF9fYSwgX19iKSwKKyAgICAgICAgICAgICAgICAgIHZlY19sdnNsKF9fYSwgKHVuc2lnbmVkIGNoYXIgKilfX2IpKTsKK30KKworLyogdmVjX3N0dmx4ICovCisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBwaXhlbCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgdmVjdG9yIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4KHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBmbG9hdCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3R2bHhsICovCisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3Igc2hvcnQgX19hLCBpbnQgX19iLCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciBib29sIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgcGl4ZWwgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIGludCBfX2EsIGludCBfX2IsIHZlY3RvciBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKHZlY19sdnJ4KF9fYiwgX19jKSwgX19hLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2bHhsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0odmVjX2x2cngoX19iLCBfX2MpLCBfX2EsIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZseGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgYm9vbCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dmx4bCh2ZWN0b3IgZmxvYXQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybSh2ZWNfbHZyeChfX2IsIF9fYyksIF9fYSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCisvKiB2ZWNfc3R2cnggKi8KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0KAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHBpeGVsIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGludCBfX2EsIGludCBfX2IsIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCB2ZWN0b3IgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3QodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGJvb2wgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cngodmVjdG9yIGZsb2F0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19zdHZyeGwgKi8KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsIF9fYykpLCBfX2IsCisgICAgICAgICAgICAgICAgIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwoCisgICAgICB2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCAodW5zaWduZWQgY2hhciAqKV9fYykpLAorICAgICAgX19iLCBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBzaG9ydCBfX2EsIGludCBfX2IsIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpfX2MpIHsKKyAgcmV0dXJuIHZlY19zdGwodmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgX19jKSksIF9fYiwKKyAgICAgICAgICAgICAgICAgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBwaXhlbCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgcGl4ZWwgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBpbnQgX19hLCBpbnQgX19iLCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgaW50IF9fYSwgaW50IF9fYiwgdmVjdG9yIGludCAqX19jKSB7CisgIHJldHVybiB2ZWNfc3RsKAorICAgICAgdmVjX3Blcm0oX19hLCB2ZWNfbHZseChfX2IsIF9fYyksIHZlY19sdnNyKF9fYiwgKHVuc2lnbmVkIGNoYXIgKilfX2MpKSwKKyAgICAgIF9fYiwgX19jKTsKK30KKworc3RhdGljIHZvaWQgX19BVFRSU19vX2FpIHZlY19zdHZyeGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCh2ZWNfcGVybShfX2EsIHZlY19sdmx4KF9fYiwgX19jKSwgdmVjX2x2c3IoX19iLCBfX2MpKSwgX19iLAorICAgICAgICAgICAgICAgICBfX2MpOworfQorCitzdGF0aWMgdm9pZCBfX0FUVFJTX29fYWkgdmVjX3N0dnJ4bCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBib29sIGludCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fQVRUUlNfb19haSB2ZWNfc3R2cnhsKHZlY3RvciBmbG9hdCBfX2EsIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZmxvYXQgKl9fYykgeworICByZXR1cm4gdmVjX3N0bCgKKyAgICAgIHZlY19wZXJtKF9fYSwgdmVjX2x2bHgoX19iLCBfX2MpLCB2ZWNfbHZzcihfX2IsICh1bnNpZ25lZCBjaGFyICopX19jKSksCisgICAgICBfX2IsIF9fYyk7Cit9CisKKy8qIHZlY19wcm9tb3RlICovCisKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKHNpZ25lZCBjaGFyIF9fYSwgaW50IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19yZXMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKSgwKTsKKyAgX19yZXNbX19iXSA9IF9fYTsKKyAgcmV0dXJuIF9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19BVFRSU19vX2FpIHZlY19wcm9tb3RlKHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgwKTsKKyAgX19yZXNbX19iXSA9IF9fYTsKKyAgcmV0dXJuIF9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfcHJvbW90ZShzaG9ydCBfX2EsIGludCBfX2IpIHsKKyAgdmVjdG9yIHNob3J0IF9fcmVzID0gKHZlY3RvciBzaG9ydCkoMCk7CisgIF9fcmVzW19fYl0gPSBfX2E7CisgIHJldHVybiBfX3JlczsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3Byb21vdGUodW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgwKTsKKyAgX19yZXNbX19iXSA9IF9fYTsKKyAgcmV0dXJuIF9fcmVzOworfQorCitzdGF0aWMgdmVjdG9yIGludCBfX0FUVFJTX29fYWkgdmVjX3Byb21vdGUoaW50IF9fYSwgaW50IF9fYikgeworICB2ZWN0b3IgaW50IF9fcmVzID0gKHZlY3RvciBpbnQpKDApOworICBfX3Jlc1tfX2JdID0gX19hOworICByZXR1cm4gX19yZXM7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfcHJvbW90ZSh1bnNpZ25lZCBpbnQgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19yZXMgPSAodmVjdG9yIHVuc2lnbmVkIGludCkoMCk7CisgIF9fcmVzW19fYl0gPSBfX2E7CisgIHJldHVybiBfX3JlczsKK30KKworc3RhdGljIHZlY3RvciBmbG9hdCBfX0FUVFJTX29fYWkgdmVjX3Byb21vdGUoZmxvYXQgX19hLCBpbnQgX19iKSB7CisgIHZlY3RvciBmbG9hdCBfX3JlcyA9ICh2ZWN0b3IgZmxvYXQpKDApOworICBfX3Jlc1tfX2JdID0gX19hOworICByZXR1cm4gX19yZXM7Cit9CisKKy8qIHZlY19zcGxhdHMgKi8KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhzaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpKF9fYSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyh1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKShfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIHNob3J0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaG9ydCkoX19hKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyh1bnNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKF9fYSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgaW50IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKGludCBfX2EpIHsgcmV0dXJuICh2ZWN0b3IgaW50KShfX2EpOyB9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgaW50IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2EpOworfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKHNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYSk7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fQVRUUlNfb19haQordmVjX3NwbGF0cyh1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoX19hKTsKK30KKworI2lmIGRlZmluZWQoX19QT1dFUjhfVkVDVE9SX18pICYmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKK3N0YXRpYyB2ZWN0b3Igc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKHNpZ25lZCBfX2ludDEyOCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIF9faW50MTI4KShfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIF9faW50MTI4IF9fQVRUUlNfb19haQordmVjX3NwbGF0cyh1bnNpZ25lZCBfX2ludDEyOCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjgpKF9fYSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdmVjdG9yIGRvdWJsZSBfX0FUVFJTX29fYWkgdmVjX3NwbGF0cyhkb3VibGUgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoX19hKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdmVjdG9yIGZsb2F0IF9fQVRUUlNfb19haSB2ZWNfc3BsYXRzKGZsb2F0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBmbG9hdCkoX19hKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJlZGljYXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogdmVjX2FsbF9lcSAqLworCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFQsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVCwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVCwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgcGl4ZWwgX19hLCB2ZWN0b3IgcGl4ZWwgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFQsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVCwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVCwgKHZlY3RvciBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVCwgKHZlY3RvciBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFQsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9MVCwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2VxKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfZ2UgKi8KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVEsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUSwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRLCAodmVjdG9yIGludClfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCBfX2IsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlc3BfcChfX0NSNl9MVCwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9nZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBnZWRwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYWxsX2d0ICovCisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9MVCwgX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCBfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVCwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndHNwX3AoX19DUjZfTFQsIF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RkcF9wKF9fQ1I2X0xULCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FsbF9pbiAqLworCitzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbGxfaW4odmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGJmcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKKy8qIHZlY19hbGxfbGUgKi8KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRLCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVEsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVEsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VzcF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9MVCwgX19iLCBfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2xlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbHQgKi8KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFQsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVCwgX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFQsICh2ZWN0b3Igc2hvcnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFQsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xULCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xULCAodmVjdG9yIGludClfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xULCBfX2IsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVCwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsIF9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFQsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVCwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFQsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ3RzcF9wKF9fQ1I2X0xULCBfX2IsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9MVCwgX19iLCBfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX2x0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0ZHBfcChfX0NSNl9MVCwgX19iLCBfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbmFuICovCisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmFuKHZlY3RvciBmbG9hdCBfX2EpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYSk7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9FUSwgX19hLCBfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25hbih2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9FUSwgX19hLCBfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbmUgKi8KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUSwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVEsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsIF9fYSwgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVEsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHBpeGVsIF9fYSwgdmVjdG9yIHBpeGVsIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUSwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgX19hLCAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1d19wKF9fQ1I2X0VRLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUSwgKHZlY3RvciBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGludClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVEsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVEsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFkcF9wKF9fQ1I2X0VRLCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYWxsX25lKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGVxZHBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbmdlICovCisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpCit2ZWNfYWxsX25nZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlc3BfcChfX0NSNl9FUSwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIGludCBfX0FUVFJTX29fYWkKK3ZlY19hbGxfbmdlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbmd0ICovCisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpCit2ZWNfYWxsX25ndCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0c3BfcChfX0NSNl9FUSwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfRVEsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIGludCBfX0FUVFJTX29fYWkKK3ZlY19hbGxfbmd0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0ZHBfcChfX0NSNl9FUSwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbGxfbmxlICovCisKK3N0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FsbF9ubGUodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9FUSwgX19iLCBfX2EpOworfQorCisvKiB2ZWNfYWxsX25sdCAqLworCitzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbGxfbmx0KHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndGZwX3AoX19DUjZfRVEsIF9fYiwgX19hKTsKK30KKworLyogdmVjX2FsbF9udW1lcmljICovCisKK3N0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FsbF9udW1lcmljKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfTFQsIF9fYSwgX19hKTsKK30KKworLyogdmVjX2FueV9lcSAqLworCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUV9SRVYsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfRVFfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfRVFfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfRVFfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2VxKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZXEodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFkcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbnlfZ2UgKi8KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBpbnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9MVF9SRVYsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVF9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0xUX1JFViwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9nZSh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlc3BfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ2VmcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2dlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGdlZHBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW55X2d0ICovCisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2JfcChfX0NSNl9FUV9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfRVFfUkVWLCBfX2EsICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c3dfcChfX0NSNl9FUV9SRVYsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVFfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9FUV9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfZ3QodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworI2lmZGVmIF9fVlNYX18KKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndHNwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7CisjZWxzZQorICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9FUV9SRVYsIF9fYSwgX19iKTsKKyNlbmRpZgorfQorCisjaWZkZWYgX19WU1hfXworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9ndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl92c3hfeHZjbXBndGRwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYik7Cit9CisjZW5kaWYKKworLyogdmVjX2FueV9sZSAqLworCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNiX3AoX19DUjZfTFRfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0xUX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNoX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0xUX1JFViwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHN3X3AoX19DUjZfTFRfUkVWLCBfX2EsICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKKyNpZmRlZiBfX1BPV0VSOF9WRUNUT1JfXworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzZF9wKF9fQ1I2X0xUX1JFViwgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfTFRfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWRfcChfX0NSNl9MVF9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2xlKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VzcF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbGUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZ2VkcF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorI2VuZGlmCisKKy8qIHZlY19hbnlfbHQgKi8KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzYl9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWJfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1Yl9wKF9fQ1I2X0VRX1JFViwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHViX3AoX19DUjZfRVFfUkVWLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3Igc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RzaF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2hfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3Igc2hvcnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1aF9wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVoX3AoX19DUjZfRVFfUkVWLCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dWhfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGludCBfX2EsIHZlY3RvciBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3Rzd19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciBpbnQpX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0dXdfcChfX0NSNl9FUV9SRVYsIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1d19wKF9fQ1I2X0VRX1JFViwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHNkX3AoX19DUjZfRVFfUkVWLCBfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0c2RfcChfX0NSNl9FUV9SRVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3R1ZF9wKF9fQ1I2X0VRX1JFViwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBndHVkX3AoX19DUjZfRVFfUkVWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9sdCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisjaWZkZWYgX19WU1hfXworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0c3BfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0VRX1JFViwgX19iLCBfX2EpOworI2VuZGlmCit9CisKKyNpZmRlZiBfX1ZTWF9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X2x0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3ZzeF94dmNtcGd0ZHBfcChfX0NSNl9FUV9SRVYsIF9fYiwgX19hKTsKK30KKyNlbmRpZgorCisvKiB2ZWNfYW55X25hbiAqLworCitzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkgdmVjX2FueV9uYW4odmVjdG9yIGZsb2F0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxZnBfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19hKTsKK30KKworLyogdmVjX2FueV9uZSAqLworCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXViX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIGNoYXIpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1Yl9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWJfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgX19hLCAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1aF9wKF9fQ1I2X0xUX1JFViwgKHZlY3RvciBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2hvcnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWhfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBwaXhlbCBfX2EsIHZlY3RvciBwaXhlbCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVoX3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBpbnQgX19hLCB2ZWN0b3IgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVF9SRVYsIF9fYSwgKHZlY3RvciBpbnQpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXV3X3AoX19DUjZfTFRfUkVWLCAodmVjdG9yIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdXdfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBpbnQpX19iKTsKK30KKworI2lmZGVmIF9fUE9XRVI4X1ZFQ1RPUl9fCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGVxdWRfcChfX0NSNl9MVF9SRVYsICh2ZWN0b3IgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoX19DUjZfTFRfUkVWLCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfTFRfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcXVkX3AoCisgICAgICBfX0NSNl9MVF9SRVYsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfTFRfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGludCBfX0FUVFJTX29fYWkgdmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZXF1ZF9wKAorICAgICAgX19DUjZfTFRfUkVWLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IF9fQVRUUlNfb19haSB2ZWNfYW55X25lKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyNpZmRlZiBfX1ZTWF9fCisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFzcF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworI2Vsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfTFRfUkVWLCBfX2EsIF9fYik7CisjZW5kaWYKK30KKworI2lmZGVmIF9fVlNYX18KK3N0YXRpYyBpbnQgX19BVFRSU19vX2FpIHZlY19hbnlfbmUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fdnN4X3h2Y21wZXFkcF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorI2VuZGlmCisKKy8qIHZlY19hbnlfbmdlICovCisKK3N0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9uZ2UodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGdlZnBfcChfX0NSNl9MVF9SRVYsIF9fYSwgX19iKTsKK30KKworLyogdmVjX2FueV9uZ3QgKi8KKworc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZWNfYW55X25ndCh2ZWN0b3IgZmxvYXQgX19hLCB2ZWN0b3IgZmxvYXQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Y21wZ3RmcF9wKF9fQ1I2X0xUX1JFViwgX19hLCBfX2IpOworfQorCisvKiB2ZWNfYW55X25sZSAqLworCitzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZlY19hbnlfbmxlKHZlY3RvciBmbG9hdCBfX2EsIHZlY3RvciBmbG9hdCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBnZWZwX3AoX19DUjZfTFRfUkVWLCBfX2IsIF9fYSk7Cit9CisKKy8qIHZlY19hbnlfbmx0ICovCisKK3N0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9ubHQodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGd0ZnBfcChfX0NSNl9MVF9SRVYsIF9fYiwgX19hKTsKK30KKworLyogdmVjX2FueV9udW1lcmljICovCisKK3N0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9udW1lcmljKHZlY3RvciBmbG9hdCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZjbXBlcWZwX3AoX19DUjZfRVFfUkVWLCBfX2EsIF9fYSk7Cit9CisKKy8qIHZlY19hbnlfb3V0ICovCisKK3N0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2FueV9vdXQodmVjdG9yIGZsb2F0IF9fYSwgdmVjdG9yIGZsb2F0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmNtcGJmcF9wKF9fQ1I2X0VRX1JFViwgX19hLCBfX2IpOworfQorCisvKiBQb3dlciA4IENyeXB0byBmdW5jdGlvbnMKK05vdGU6IFdlIGRpdmVyZ2UgZnJvbSB0aGUgY3VycmVudCBHQ0MgaW1wbGVtZW50YXRpb24gd2l0aCByZWdhcmQKK3RvIGNyeXB0b2dyYXBoeSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgYXMgZm9sbG93czoKKy0gT25seSB0aGUgU0hBIGFuZCBBRVMgaW5zdHJ1Y3Rpb25zIGFuZCBidWlsdGlucyBhcmUgZGlzYWJsZWQgYnkgLW1uby1jcnlwdG8KKy0gVGhlIHJlbWFpbmluZyBvbmVzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBQb3dlcjggYW5kIHVwIHNvCisgIHJlcXVpcmUgLW1wb3dlcjgtdmVjdG9yCitUaGUganVzdGlmaWNhdGlvbiBmb3IgdGhpcyBpcyB0aGF0IGV4cG9ydCByZXF1aXJlbWVudHMgcmVxdWlyZSB0aGF0CitDYXRlZ29yeTpWZWN0b3IuQ3J5cHRvIGlzIG9wdGlvbmFsIChpLmUuIGNvbXBsaWFudCBoYXJkd2FyZSBtYXkgbm90IHByb3ZpZGUKK3N1cHBvcnQpLiBBcyBhIHJlc3VsdCwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHR1cm4gb2ZmIHN1cHBvcnQgZm9yIHRob3NlLgorVGhlIHJlbWFpbmluZyBvbmVzIChjdXJyZW50bHkgY29udHJvbGxlZCBieSAtbWNyeXB0byBmb3IgR0NDKSBzdGlsbAorbmVlZCB0byBiZSBwcm92aWRlZCBvbiBjb21wbGlhbnQgaGFyZHdhcmUgZXZlbiBpZiBWZWN0b3IuQ3J5cHRvIGlzIG5vdAorcHJvdmlkZWQuCisqLworI2lmZGVmIF9fQ1JZUFRPX18KKyNkZWZpbmUgdmVjX3Nib3hfYmUgX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZzYm94CisjZGVmaW5lIHZlY19jaXBoZXJfYmUgX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZjaXBoZXIKKyNkZWZpbmUgdmVjX2NpcGhlcmxhc3RfYmUgX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZjaXBoZXJsYXN0CisjZGVmaW5lIHZlY19uY2lwaGVyX2JlIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192bmNpcGhlcgorI2RlZmluZSB2ZWNfbmNpcGhlcmxhc3RfYmUgX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZuY2lwaGVybGFzdAorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX2J1aWx0aW5fY3J5cHRvX3ZzYm94KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnNib3goX19hKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorX19idWlsdGluX2NyeXB0b192Y2lwaGVyKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdmNpcGhlcihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKK19fYnVpbHRpbl9jcnlwdG9fdmNpcGhlcmxhc3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdmNpcGhlcmxhc3QoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX2J1aWx0aW5fY3J5cHRvX3ZuY2lwaGVyKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZuY2lwaGVyKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorX19idWlsdGluX2NyeXB0b192bmNpcGhlcmxhc3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZuY2lwaGVybGFzdChfX2EsIF9fYik7Cit9CisKKyNkZWZpbmUgX19idWlsdGluX2NyeXB0b192c2hhc2lnbWFkIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192c2hhc2lnbWFkCisjZGVmaW5lIF9fYnVpbHRpbl9jcnlwdG9fdnNoYXNpZ21hdyBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnNoYXNpZ21hdworCisjZGVmaW5lIHZlY19zaGFzaWdtYV9iZShYLCBZLCBaKSBcCisgIF9HZW5lcmljKChYKSwgdmVjdG9yIHVuc2lnbmVkIGludDogX19idWlsdGluX2NyeXB0b192c2hhc2lnbWF3LCBcCisgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZzogX19idWlsdGluX2NyeXB0b192c2hhc2lnbWFkKSBcCisoKFgpLCAoWSksIChaKSkKKyNlbmRpZgorCisjaWZkZWYgX19QT1dFUjhfVkVDVE9SX18KK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkKK19fYnVpbHRpbl9jcnlwdG9fdnBlcm14b3IodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwZXJteG9yKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fQVRUUlNfb19haQorX19idWlsdGluX2NyeXB0b192cGVybXhvcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cGVybXhvcigKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBpbnQgX19BVFRSU19vX2FpIF9fYnVpbHRpbl9jcnlwdG9fdnBlcm14b3IoCisgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwZXJteG9yKAorICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkgX19idWlsdGluX2NyeXB0b192cGVybXhvcigKKyAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cGVybXhvcigKKyAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fQVRUUlNfb19haQorX19idWlsdGluX2NyeXB0b192cG1zdW1iKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY19jcnlwdG9fdnBtc3VtYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19BVFRSU19vX2FpCitfX2J1aWx0aW5fY3J5cHRvX3ZwbXN1bWIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfY3J5cHRvX3ZwbXN1bWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIHVuc2lnbmVkIGludCBfX0FUVFJTX29fYWkKK19fYnVpbHRpbl9jcnlwdG9fdnBtc3VtYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cG1zdW13KF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19BVFRSU19vX2FpCitfX2J1aWx0aW5fY3J5cHRvX3ZwbXN1bWIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX2NyeXB0b192cG1zdW1kKF9fYSwgX19iKTsKK30KKworc3RhdGljIHZlY3RvciBzaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZnYmJkICh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmdiYmQoKHZlY3RvciB1bnNpZ25lZCBjaGFyKSBfX2EpOworfQorCisjZGVmaW5lIHZlY19wbXN1bV9iZSBfX2J1aWx0aW5fY3J5cHRvX3ZwbXN1bWIKKyNkZWZpbmUgdmVjX2diIF9fYnVpbHRpbl9hbHRpdmVjX3ZnYmJkCisKK3N0YXRpYyB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX0FUVFJTX29fYWkgdmVjX3ZnYmJkICh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWx0aXZlY192Z2JiZChfX2EpOworfQorCitzdGF0aWMgdmVjdG9yIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YnBlcm1xICh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FsdGl2ZWNfdmJwZXJtcSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpIF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKSBfX2IpOworfQorCitzdGF0aWMgdmVjdG9yIGxvbmcgbG9uZyBfX0FUVFJTX29fYWkKK3ZlY192YnBlcm1xICh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZicGVybXEoX19hLCBfX2IpOworfQorCisjaWZkZWYgX19wb3dlcnBjNjRfXworc3RhdGljIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQordmVjX2JwZXJtICh2ZWN0b3IgdW5zaWduZWQgX19pbnQxMjggX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hbHRpdmVjX3ZicGVybXEoKHZlY3RvciB1bnNpZ25lZCBjaGFyKSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19iKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyN1bmRlZiBfX0FUVFJTX29fYWkKKworI2VuZGlmIC8qIF9fQUxUSVZFQ19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FtbWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODgwZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hbW1pbnRyaW4uaApAQCAtMCwwICsxLDIwOSBAQAorLyo9PT0tLS0tIGFtbWludHJpbi5oIC0gU1NFNGEgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0FNTUlOVFJJTl9ICisjZGVmaW5lIF9fQU1NSU5UUklOX0gKKworI2luY2x1ZGUgPHBtbWludHJpbi5oPgorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzZTRhIikpKQorCisvLy8gXGJyaWVmIEV4dHJhY3RzIHRoZSBzcGVjaWZpZWQgYml0cyBmcm9tIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZCBhdCB0aGUgaW5kZXggaWR4IGFuZCBvZiB0aGUgbGVuZ3RoIGxlbi4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gX19tMTI4aSBfbW1fZXh0cmFjdGlfc2k2NChfX20xMjhpIHgsIGNvbnN0IGludCBsZW4sIGNvbnN0IGludCBpZHgpOworLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBcY29kZQorLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBFWFRSUSBpbnN0cnVjdGlvbi4KKy8vLyBcZW5kY29kZQorLy8vCisvLy8gXHBhcmFtIHgKKy8vLyAgICBUaGUgdmFsdWUgZnJvbSB3aGljaCBiaXRzIGFyZSBleHRyYWN0ZWQuCisvLy8gXHBhcmFtIGxlbgorLy8vICAgIEJpdHMgWzU6MF0gc3BlY2lmeSB0aGUgbGVuZ3RoOyB0aGUgb3RoZXIgYml0cyBhcmUgaWdub3JlZC4gSWYgYml0cyBbNTowXQorLy8vICAgIGFyZSB6ZXJvLCB0aGUgbGVuZ3RoIGlzIGludGVycHJldGVkIGFzIDY0LgorLy8vIFxwYXJhbSBpZHgKKy8vLyAgICBCaXRzIFs1OjBdIHNwZWNpZnkgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQ7IHRoZSBvdGhlcgorLy8vICAgIGJpdHMgYXJlIGlnbm9yZWQuIElmIHRoZSBzdW0gb2YgdGhlIGluZGV4IGFuZCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuCisvLy8gICAgNjQsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLiBJZiB0aGUgbGVuZ3RoIGFuZCBpbmRleCBhcmUgYm90aCB6ZXJvLAorLy8vICAgIGJpdHMgWzYzOjBdIG9mIHBhcmFtZXRlciB4IGFyZSBleHRyYWN0ZWQuIElmIHRoZSBsZW5ndGggaXMgemVybworLy8vICAgIGJ1dCB0aGUgaW5kZXggaXMgbm9uLXplcm8sIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciB3aG9zZSBsb3dlciA2NCBiaXRzIGNvbnRhaW4gdGhlIGJpdHMKKy8vLyAgICBleHRyYWN0ZWQgZnJvbSB0aGUgc291cmNlIG9wZXJhbmQuCisjZGVmaW5lIF9tbV9leHRyYWN0aV9zaTY0KHgsIGxlbiwgaWR4KSBcCisgICgoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9leHRycWkoKF9fdjJkaSkoX19tMTI4aSkoeCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcikobGVuKSwgKGNoYXIpKGlkeCkpKQorCisvLy8gXGJyaWVmIEV4dHJhY3RzIHRoZSBzcGVjaWZpZWQgYml0cyBmcm9tIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSAxMjgtYml0CisvLy8gICAgaW50ZWdlciB2ZWN0b3Igb3BlcmFuZCBhdCB0aGUgaW5kZXggYW5kIG9mIHRoZSBsZW5ndGggc3BlY2lmaWVkIGJ5IF9feS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIEVYVFJRIGluc3RydWN0aW9uLgorLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBccGFyYW0gX194CisvLy8gICAgVGhlIHZhbHVlIGZyb20gd2hpY2ggYml0cyBhcmUgZXh0cmFjdGVkLgorLy8vIFxwYXJhbSBfX3kKKy8vLyAgICBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgYXQgWzEzOjhdCisvLy8gICAgYW5kIHRoZSBsZW5ndGggYXQgWzU6MF07IGFsbCBvdGhlciBiaXRzIGFyZSBpZ25vcmVkLgorLy8vICAgIElmIGJpdHMgWzU6MF0gYXJlIHplcm8sIHRoZSBsZW5ndGggaXMgaW50ZXJwcmV0ZWQgYXMgNjQuCisvLy8gICAgSWYgdGhlIHN1bSBvZiB0aGUgaW5kZXggYW5kIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNjQsIHRoZSByZXN1bHQgaXMKKy8vLyAgICB1bmRlZmluZWQuIElmIHRoZSBsZW5ndGggYW5kIGluZGV4IGFyZSBib3RoIHplcm8sIGJpdHMgWzYzOjBdIG9mCisvLy8gICAgcGFyYW1ldGVyIF9feCBhcmUgZXh0cmFjdGVkLiBJZiB0aGUgbGVuZ3RoIGlzIHplcm8gYnV0IHRoZSBpbmRleCBpcworLy8vICAgIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgdmVjdG9yIHdob3NlIGxvd2VyIDY0IGJpdHMgY29udGFpbiB0aGUgYml0cyBleHRyYWN0ZWQKKy8vLyAgICBmcm9tIHRoZSBzb3VyY2Ugb3BlcmFuZC4KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZXh0cmFjdF9zaTY0KF9fbTEyOGkgX194LCBfX20xMjhpIF9feSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2V4dHJxKChfX3YyZGkpX194LCAoX192MTZxaSlfX3kpOworfQorCisvLy8gXGJyaWVmIEluc2VydHMgYml0cyBvZiBhIHNwZWNpZmllZCBsZW5ndGggZnJvbSB0aGUgc291cmNlIGludGVnZXIgdmVjdG9yCisvLy8gICAgeSBpbnRvIHRoZSBsb3dlciA2NCBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHZlY3RvciB4IGF0IHRoZQorLy8vICAgIGluZGV4IGlkeCBhbmQgb2YgdGhlIGxlbmd0aCBsZW4uCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIF9fbTEyOGkgX21tX2luc2VydGlfc2k2NChfX20xMjhpIHgsIF9fbTEyOGkgeSwgY29uc3QgaW50IGxlbiwKKy8vLyBjb25zdCBpbnQgaWR4KTsKKy8vLyBcZW5kY29kZQorLy8vCisvLy8gXGNvZGUKKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgSU5TRVJUUSBpbnN0cnVjdGlvbi4KKy8vLyBcZW5kY29kZQorLy8vCisvLy8gXHBhcmFtIHgKKy8vLyAgICBUaGUgZGVzdGluYXRpb24gb3BlcmFuZCB3aGVyZSBiaXRzIHdpbGwgYmUgaW5zZXJ0ZWQuIFRoZSBpbnNlcnRlZCBiaXRzCisvLy8gICAgYXJlIGRlZmluZWQgYnkgdGhlIGxlbmd0aCBsZW4gYW5kIGJ5IHRoZSBpbmRleCBpZHggc3BlY2lmeWluZyB0aGUgbGVhc3QKKy8vLyAgICBzaWduaWZpY2FudCBiaXQuCisvLy8gXHBhcmFtIHkKKy8vLyAgICBUaGUgc291cmNlIG9wZXJhbmQgY29udGFpbmluZyB0aGUgYml0cyB0byBiZSBleHRyYWN0ZWQuIFRoZSBleHRyYWN0ZWQKKy8vLyAgICBiaXRzIGFyZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBvcGVyYW5kIHkgb2YgbGVuZ3RoIGxlbi4KKy8vLyBccGFyYW0gbGVuCisvLy8gICAgQml0cyBbNTowXSBzcGVjaWZ5IHRoZSBsZW5ndGg7IHRoZSBvdGhlciBiaXRzIGFyZSBpZ25vcmVkLiBJZiBiaXRzIFs1OjBdCisvLy8gICAgYXJlIHplcm8sIHRoZSBsZW5ndGggaXMgaW50ZXJwcmV0ZWQgYXMgNjQuCisvLy8gXHBhcmFtIGlkeAorLy8vICAgIEJpdHMgWzU6MF0gc3BlY2lmeSB0aGUgaW5kZXggb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdDsgdGhlIG90aGVyCisvLy8gICAgYml0cyBhcmUgaWdub3JlZC4gSWYgdGhlIHN1bSBvZiB0aGUgaW5kZXggYW5kIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4KKy8vLyAgICA2NCwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuIElmIHRoZSBsZW5ndGggYW5kIGluZGV4IGFyZSBib3RoIHplcm8sCisvLy8gICAgYml0cyBbNjM6MF0gb2YgcGFyYW1ldGVyIHkgYXJlIGluc2VydGVkIGludG8gcGFyYW1ldGVyIHguIElmIHRoZQorLy8vICAgIGxlbmd0aCBpcyB6ZXJvIGJ1dCB0aGUgaW5kZXggaXMgbm9uLXplcm8sIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorLy8vIFxyZXR1cm5zIEEgMTI4LWJpdCBpbnRlZ2VyIHZlY3RvciBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBsb3dlciA2NC1iaXRzCisvLy8gICAgb2YgZGVzdGluYXRpb24gb3BlcmFuZCB4IHdpdGggdGhlIHNwZWNpZmllZCBiaXRmaWVsZHMgcmVwbGFjZWQgYnkgdGhlCisvLy8gICAgbG93ZXIgYml0cyBvZiBzb3VyY2Ugb3BlcmFuZCB5LiBUaGUgdXBwZXIgNjQgYml0cyBvZiB0aGUgcmV0dXJuIHZhbHVlCisvLy8gICAgYXJlIHVuZGVmaW5lZC4KKworI2RlZmluZSBfbW1faW5zZXJ0aV9zaTY0KHgsIHksIGxlbiwgaWR4KSBcCisgICgoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9pbnNlcnRxaSgoX192MmRpKShfX20xMjhpKSh4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoeSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKShsZW4pLCAoY2hhcikoaWR4KSkpCisKKy8vLyBcYnJpZWYgSW5zZXJ0cyBiaXRzIG9mIGEgc3BlY2lmaWVkIGxlbmd0aCBmcm9tIHRoZSBzb3VyY2UgaW50ZWdlciB2ZWN0b3IKKy8vLyAgICBfX3kgaW50byB0aGUgbG93ZXIgNjQgYml0cyBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB2ZWN0b3IgX194IGF0CisvLy8gICAgdGhlIGluZGV4IGFuZCBvZiB0aGUgbGVuZ3RoIHNwZWNpZmllZCBieSBfX3kuCisvLy8KKy8vLyBcaGVhZGVyZmlsZSA8eDg2aW50cmluLmg+CisvLy8KKy8vLyBcY29kZQorLy8vIFRoaXMgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBcYyBJTlNFUlRRIGluc3RydWN0aW9uLgorLy8vIFxlbmRjb2RlCisvLy8KKy8vLyBccGFyYW0gX194CisvLy8gICAgVGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgd2hlcmUgYml0cyB3aWxsIGJlIGluc2VydGVkLiBUaGUgaW5zZXJ0ZWQgYml0cworLy8vICAgIGFyZSBkZWZpbmVkIGJ5IHRoZSBsZW5ndGggYW5kIGJ5IHRoZSBpbmRleCBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisvLy8gICAgc3BlY2lmaWVkIGJ5IG9wZXJhbmQgX195LgorLy8vIFxwYXJhbSBfX3kKKy8vLyAgICBUaGUgc291cmNlIG9wZXJhbmQgY29udGFpbmluZyB0aGUgYml0cyB0byBiZSBleHRyYWN0ZWQuIFRoZSBleHRyYWN0ZWQKKy8vLyAgICBiaXRzIGFyZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBvcGVyYW5kIF9feSB3aXRoIGxlbmd0aCBzcGVjaWZpZWQKKy8vLyAgICBieSBiaXRzIFs2OTo2NF0uIFRoZXNlIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBhdCB0aGUgaW5kZXgKKy8vLyAgICBzcGVjaWZpZWQgYnkgYml0cyBbNzc6NzJdOyBhbGwgb3RoZXIgYml0cyBhcmUgaWdub3JlZC4KKy8vLyAgICBJZiBiaXRzIFs2OTo2NF0gYXJlIHplcm8sIHRoZSBsZW5ndGggaXMgaW50ZXJwcmV0ZWQgYXMgNjQuCisvLy8gICAgSWYgdGhlIHN1bSBvZiB0aGUgaW5kZXggYW5kIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNjQsIHRoZSByZXN1bHQgaXMKKy8vLyAgICB1bmRlZmluZWQuIElmIHRoZSBsZW5ndGggYW5kIGluZGV4IGFyZSBib3RoIHplcm8sIGJpdHMgWzYzOjBdIG9mCisvLy8gICAgcGFyYW1ldGVyIF9feSBhcmUgaW5zZXJ0ZWQgaW50byBwYXJhbWV0ZXIgX194LiBJZiB0aGUgbGVuZ3RoCisvLy8gICAgaXMgemVybyBidXQgdGhlIGluZGV4IGlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKy8vLyBccmV0dXJucyBBIDEyOC1iaXQgaW50ZWdlciB2ZWN0b3IgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgbG93ZXIgNjQtYml0cworLy8vICAgIG9mIGRlc3RpbmF0aW9uIG9wZXJhbmQgX194IHdpdGggdGhlIHNwZWNpZmllZCBiaXRmaWVsZHMgcmVwbGFjZWQgYnkgdGhlCisvLy8gICAgbG93ZXIgYml0cyBvZiBzb3VyY2Ugb3BlcmFuZCBfX3kuIFRoZSB1cHBlciA2NCBiaXRzIG9mIHRoZSByZXR1cm4gdmFsdWUKKy8vLyAgICBhcmUgdW5kZWZpbmVkLgorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2luc2VydF9zaTY0KF9fbTEyOGkgX194LCBfX20xMjhpIF9feSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2luc2VydHEoKF9fdjJkaSlfX3gsIChfX3YyZGkpX195KTsKK30KKworLy8vIFxicmllZiBTdG9yZXMgYSA2NC1iaXQgZG91YmxlLXByZWNpc2lvbiB2YWx1ZSBpbiBhIDY0LWJpdCBtZW1vcnkgbG9jYXRpb24uCisvLy8gICAgVG8gbWluaW1pemUgY2FjaGluZywgdGhlIGRhdGEgaXMgZmxhZ2dlZCBhcyBub24tdGVtcG9yYWwgKHVubGlrZWx5IHRvIGJlCisvLy8gICAgdXNlZCBhZ2FpbiBzb29uKS4KKy8vLworLy8vIFxoZWFkZXJmaWxlIDx4ODZpbnRyaW4uaD4KKy8vLworLy8vIFxjb2RlCisvLy8gVGhpcyBpbnRyaW5zaWMgY29ycmVzcG9uZHMgdG8gdGhlIFxjIE1PVk5UU0QgaW5zdHJ1Y3Rpb24uCisvLy8gXGVuZGNvZGUKKy8vLworLy8vIFxwYXJhbSBfX3AKKy8vLyAgICBUaGUgNjQtYml0IG1lbW9yeSBsb2NhdGlvbiB1c2VkIHRvIHN0b3JlIHRoZSByZWdpc3RlciB2YWx1ZS4KKy8vLyBccGFyYW0gX19hCisvLy8gICAgVGhlIDY0LWJpdCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHZhbHVlIHRvCisvLy8gICAgYmUgc3RvcmVkLgorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fc2QoZG91YmxlICpfX3AsIF9fbTEyOGQgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudHNkKF9fcCwgKF9fdjJkZilfX2EpOworfQorCisvLy8gXGJyaWVmIFN0b3JlcyBhIDMyLWJpdCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlIGluIGEgMzItYml0CisvLy8gICAgbWVtb3J5IGxvY2F0aW9uLiBUbyBtaW5pbWl6ZSBjYWNoaW5nLCB0aGUgZGF0YSBpcyBmbGFnZ2VkIGFzCisvLy8gICAgbm9uLXRlbXBvcmFsICh1bmxpa2VseSB0byBiZSB1c2VkIGFnYWluIHNvb24pLgorLy8vCisvLy8gXGhlYWRlcmZpbGUgPHg4NmludHJpbi5oPgorLy8vCisvLy8gXGNvZGUKKy8vLyBUaGlzIGludHJpbnNpYyBjb3JyZXNwb25kcyB0byB0aGUgXGMgTU9WTlRTUyBpbnN0cnVjdGlvbi4KKy8vLyBcZW5kY29kZQorLy8vCisvLy8gXHBhcmFtIF9fcAorLy8vICAgIFRoZSAzMi1iaXQgbWVtb3J5IGxvY2F0aW9uIHVzZWQgdG8gc3RvcmUgdGhlIHJlZ2lzdGVyIHZhbHVlLgorLy8vIFxwYXJhbSBfX2EKKy8vLyAgICBUaGUgMzItYml0IHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgdmFsdWUgdG8KKy8vLyAgICBiZSBzdG9yZWQuCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9zcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudHNzKF9fcCwgKF9fdjRzZilfX2EpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0FNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FybV9hY2xlLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FybV9hY2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlMWQwOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXJtX2FjbGUuaApAQCAtMCwwICsxLDMwOCBAQAorLyo9PT0tLS0tIGFybV9hY2xlLmggLSBBUk0gTm9uLU5lb24gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0FSTV9BQ0xFX0gKKyNkZWZpbmUgX19BUk1fQUNMRV9ICisKKyNpZm5kZWYgX19BUk1fQUNMRQorI2Vycm9yICJBQ0xFIGludHJpbnNpY3Mgc3VwcG9ydCBub3QgZW5hYmxlZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIDggU1lOQ0hST05JWkFUSU9OLCBCQVJSSUVSIEFORCBISU5UIElOVFJJTlNJQ1MgKi8KKy8qIDguMyBNZW1vcnkgYmFycmllcnMgKi8KKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgX19kbWIoaSkgX19idWlsdGluX2FybV9kbWIoaSkKKyNkZWZpbmUgX19kc2IoaSkgX19idWlsdGluX2FybV9kc2IoaSkKKyNkZWZpbmUgX19pc2IoaSkgX19idWlsdGluX2FybV9pc2IoaSkKKyNlbmRpZgorCisvKiA4LjQgSGludHMgKi8KKworI2lmICFkZWZpbmVkKF9NU0NfVkVSKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3dmaSh2b2lkKSB7CisgIF9fYnVpbHRpbl9hcm1fd2ZpKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkgX193ZmUodm9pZCkgeworICBfX2J1aWx0aW5fYXJtX3dmZSgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpIF9fc2V2KHZvaWQpIHsKKyAgX19idWlsdGluX2FybV9zZXYoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3Nldmwodm9pZCkgeworICBfX2J1aWx0aW5fYXJtX3NldmwoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKSBfX3lpZWxkKHZvaWQpIHsKKyAgX19idWlsdGluX2FybV95aWVsZCgpOworfQorI2VuZGlmCisKKyNpZiBfX0FSTV8zMkJJVF9TVEFURQorI2RlZmluZSBfX2RiZyh0KSBfX2J1aWx0aW5fYXJtX2RiZyh0KQorI2VuZGlmCisKKy8qIDguNSBTd2FwICovCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorICBfX3N3cCh1aW50MzJfdCB4LCB2b2xhdGlsZSB1aW50MzJfdCAqcCkgeworICB1aW50MzJfdCB2OworICBkbyB2ID0gX19idWlsdGluX2FybV9sZHJleChwKTsgd2hpbGUgKF9fYnVpbHRpbl9hcm1fc3RyZXgoeCwgcCkpOworICByZXR1cm4gdjsKK30KKworLyogOC42IE1lbW9yeSBwcmVmZXRjaCBpbnRyaW5zaWNzICovCisvKiA4LjYuMSBEYXRhIHByZWZldGNoICovCisjZGVmaW5lIF9fcGxkKGFkZHIpIF9fcGxkeCgwLCAwLCAwLCBhZGRyKQorCisjaWYgX19BUk1fMzJCSVRfU1RBVEUKKyNkZWZpbmUgX19wbGR4KGFjY2Vzc19raW5kLCBjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgYWRkcikgXAorICBfX2J1aWx0aW5fYXJtX3ByZWZldGNoKGFkZHIsIGFjY2Vzc19raW5kLCAxKQorI2Vsc2UKKyNkZWZpbmUgX19wbGR4KGFjY2Vzc19raW5kLCBjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgYWRkcikgXAorICBfX2J1aWx0aW5fYXJtX3ByZWZldGNoKGFkZHIsIGFjY2Vzc19raW5kLCBjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgMSkKKyNlbmRpZgorCisvKiA4LjYuMiBJbnN0cnVjdGlvbiBwcmVmZXRjaCAqLworI2RlZmluZSBfX3BsaShhZGRyKSBfX3BsaXgoMCwgMCwgYWRkcikKKworI2lmIF9fQVJNXzMyQklUX1NUQVRFCisjZGVmaW5lIF9fcGxpeChjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgYWRkcikgXAorICBfX2J1aWx0aW5fYXJtX3ByZWZldGNoKGFkZHIsIDAsIDApCisjZWxzZQorI2RlZmluZSBfX3BsaXgoY2FjaGVfbGV2ZWwsIHJldGVudGlvbl9wb2xpY3ksIGFkZHIpIFwKKyAgX19idWlsdGluX2FybV9wcmVmZXRjaChhZGRyLCAwLCBjYWNoZV9sZXZlbCwgcmV0ZW50aW9uX3BvbGljeSwgMCkKKyNlbmRpZgorCisvKiA4LjcgTk9QICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpIF9fbm9wKHZvaWQpIHsKKyAgX19idWlsdGluX2FybV9ub3AoKTsKK30KKworLyogOSBEQVRBLVBST0NFU1NJTkcgSU5UUklOU0lDUyAqLworLyogOS4yIE1pc2NlbGxhbmVvdXMgZGF0YS1wcm9jZXNzaW5nIGludHJpbnNpY3MgKi8KKy8qIFJPUiAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19yb3IodWludDMyX3QgeCwgdWludDMyX3QgeSkgeworICB5ICU9IDMyOworICBpZiAoeSA9PSAwKSAgcmV0dXJuIHg7CisgIHJldHVybiAoeCA+PiB5KSB8ICh4IDw8ICgzMiAtIHkpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19yb3JsbCh1aW50NjRfdCB4LCB1aW50MzJfdCB5KSB7CisgIHkgJT0gNjQ7CisgIGlmICh5ID09IDApICByZXR1cm4geDsKKyAgcmV0dXJuICh4ID4+IHkpIHwgKHggPDwgKDY0IC0geSkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fcm9ybCh1bnNpZ25lZCBsb25nIHgsIHVpbnQzMl90IHkpIHsKKyNpZiBfX1NJWkVPRl9MT05HX18gPT0gNAorICByZXR1cm4gX19yb3IoeCwgeSk7CisjZWxzZQorICByZXR1cm4gX19yb3JsbCh4LCB5KTsKKyNlbmRpZgorfQorCisKKy8qIENMWiAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19jbHoodWludDMyX3QgdCkgeworICByZXR1cm4gX19idWlsdGluX2Nseih0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorICBfX2NsemwodW5zaWduZWQgbG9uZyB0KSB7CisgIHJldHVybiBfX2J1aWx0aW5fY2x6bCh0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19jbHpsbCh1aW50NjRfdCB0KSB7CisgIHJldHVybiBfX2J1aWx0aW5fY2x6bGwodCk7Cit9CisKKy8qIFJFViAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19yZXYodWludDMyX3QgdCkgeworICByZXR1cm4gX19idWlsdGluX2Jzd2FwMzIodCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19yZXZsKHVuc2lnbmVkIGxvbmcgdCkgeworI2lmIF9fU0laRU9GX0xPTkdfXyA9PSA0CisgIHJldHVybiBfX2J1aWx0aW5fYnN3YXAzMih0KTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYnN3YXA2NCh0KTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorICBfX3JldmxsKHVpbnQ2NF90IHQpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9ic3dhcDY0KHQpOworfQorCisvKiBSRVYxNiAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19yZXYxNih1aW50MzJfdCB0KSB7CisgIHJldHVybiBfX3JvcihfX3Jldih0KSwgMTYpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorICBfX3JldjE2bGwodWludDY0X3QgdCkgeworICByZXR1cm4gKCgodWludDY0X3QpX19yZXYxNih0ID4+IDMyKSkgPDwgMzIpIHwgX19yZXYxNih0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorICBfX3JldjE2bCh1bnNpZ25lZCBsb25nIHQpIHsKKyNpZiBfX1NJWkVPRl9MT05HX18gPT0gNAorICAgIHJldHVybiBfX3JldjE2KHQpOworI2Vsc2UKKyAgICByZXR1cm4gX19yZXYxNmxsKHQpOworI2VuZGlmCit9CisKKy8qIFJFVlNIICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fcmV2c2goaW50MTZfdCB0KSB7CisgIHJldHVybiBfX2J1aWx0aW5fYnN3YXAxNih0KTsKK30KKworLyogUkJJVCAqLworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19yYml0KHVpbnQzMl90IHQpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fcmJpdCh0KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19yYml0bGwodWludDY0X3QgdCkgeworI2lmIF9fQVJNXzMyQklUX1NUQVRFCisgIHJldHVybiAoKCh1aW50NjRfdCkgX19idWlsdGluX2FybV9yYml0KHQpKSA8PCAzMikgfAorICAgIF9fYnVpbHRpbl9hcm1fcmJpdCh0ID4+IDMyKTsKKyNlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3JiaXQ2NCh0KTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fcmJpdGwodW5zaWduZWQgbG9uZyB0KSB7CisjaWYgX19TSVpFT0ZfTE9OR19fID09IDQKKyAgcmV0dXJuIF9fcmJpdCh0KTsKKyNlbHNlCisgIHJldHVybiBfX3JiaXRsbCh0KTsKKyNlbmRpZgorfQorCisvKgorICogOS40IFNhdHVyYXRpbmcgaW50cmluc2ljcworICoKKyAqIEZJWE1FOiBDaGFuZ2UgZ3VhcmQgdG8gdGhlaXIgY29ycm9zcG9uZGluZyBfX0FSTV9GRUFUVVJFIGZsYWcgd2hlbiBRIGZsYWcKKyAqIGludHJpbnNpY3MgYXJlIGltcGxlbWVudGVkIGFuZCB0aGUgZmxhZyBpcyBlbmFibGVkLgorICovCisvKiA5LjQuMSBXaWR0aC1zcGVjaWZpZWQgc2F0dXJhdGlvbiBpbnRyaW5zaWNzICovCisjaWYgX19BUk1fMzJCSVRfU1RBVEUKKyNkZWZpbmUgX19zc2F0KHgsIHkpIF9fYnVpbHRpbl9hcm1fc3NhdCh4LCB5KQorI2RlZmluZSBfX3VzYXQoeCwgeSkgX19idWlsdGluX2FybV91c2F0KHgsIHkpCisjZW5kaWYKKworLyogOS40LjIgU2F0dXJhdGluZyBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gaW50cmluc2ljcyAqLworI2lmIF9fQVJNXzMyQklUX1NUQVRFCitzdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fcWFkZChpbnQzMl90IHQsIGludDMyX3QgdikgeworICByZXR1cm4gX19idWlsdGluX2FybV9xYWRkKHQsIHYpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fcXN1YihpbnQzMl90IHQsIGludDMyX3QgdikgeworICByZXR1cm4gX19idWlsdGluX2FybV9xc3ViKHQsIHYpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3FkYmwoaW50MzJfdCB0KSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX3FhZGQodCwgdCk7Cit9CisjZW5kaWYKKworLyogOS43IENSQzMyIGludHJpbnNpY3MgKi8KKyNpZiBfX0FSTV9GRUFUVVJFX0NSQzMyCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorICBfX2NyYzMyYih1aW50MzJfdCBhLCB1aW50OF90IGIpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJiKGEsIGIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorICBfX2NyYzMyaCh1aW50MzJfdCBhLCB1aW50MTZfdCBiKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyaChhLCBiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKyAgX19jcmMzMncodWludDMyX3QgYSwgdWludDMyX3QgYikgeworICByZXR1cm4gX19idWlsdGluX2FybV9jcmMzMncoYSwgYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fY3JjMzJkKHVpbnQzMl90IGEsIHVpbnQ2NF90IGIpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hcm1fY3JjMzJkKGEsIGIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorICBfX2NyYzMyY2IodWludDMyX3QgYSwgdWludDhfdCBiKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2IoYSwgYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fY3JjMzJjaCh1aW50MzJfdCBhLCB1aW50MTZfdCBiKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2goYSwgYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fY3JjMzJjdyh1aW50MzJfdCBhLCB1aW50MzJfdCBiKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY3coYSwgYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisgIF9fY3JjMzJjZCh1aW50MzJfdCBhLCB1aW50NjRfdCBiKSB7CisgIHJldHVybiBfX2J1aWx0aW5fYXJtX2NyYzMyY2QoYSwgYik7Cit9CisjZW5kaWYKKworLyogMTAuMSBTcGVjaWFsIHJlZ2lzdGVyIGludHJpbnNpY3MgKi8KKyNkZWZpbmUgX19hcm1fcnNyKHN5c3JlZykgX19idWlsdGluX2FybV9yc3Ioc3lzcmVnKQorI2RlZmluZSBfX2FybV9yc3I2NChzeXNyZWcpIF9fYnVpbHRpbl9hcm1fcnNyNjQoc3lzcmVnKQorI2RlZmluZSBfX2FybV9yc3JwKHN5c3JlZykgX19idWlsdGluX2FybV9yc3JwKHN5c3JlZykKKyNkZWZpbmUgX19hcm1fd3NyKHN5c3JlZywgdikgX19idWlsdGluX2FybV93c3Ioc3lzcmVnLCB2KQorI2RlZmluZSBfX2FybV93c3I2NChzeXNyZWcsIHYpIF9fYnVpbHRpbl9hcm1fd3NyNjQoc3lzcmVnLCB2KQorI2RlZmluZSBfX2FybV93c3JwKHN5c3JlZywgdikgX19idWlsdGluX2FybV93c3JwKHN5c3JlZywgdikKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVJNX0FDTEVfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hcm1fbmVvbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hcm1fbmVvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOTRjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2FybV9uZW9uLmgKQEAgLTAsMCArMSw2OTIzNyBAQAorLyo9PT0tLS0tIGFybV9uZW9uLmggLSBBUk0gTmVvbiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0FSTV9ORU9OX0gKKyNkZWZpbmUgX19BUk1fTkVPTl9ICisKKyNpZiAhZGVmaW5lZChfX0FSTV9ORU9OKQorI2Vycm9yICJORU9OIHN1cHBvcnQgbm90IGVuYWJsZWQiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCit0eXBlZGVmIGZsb2F0IGZsb2F0MzJfdDsKK3R5cGVkZWYgX19mcDE2IGZsb2F0MTZfdDsKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBkb3VibGUgZmxvYXQ2NF90OworI2VuZGlmCisKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiB1aW50OF90IHBvbHk4X3Q7Cit0eXBlZGVmIHVpbnQxNl90IHBvbHkxNl90OwordHlwZWRlZiB1aW50NjRfdCBwb2x5NjRfdDsKK3R5cGVkZWYgX191aW50MTI4X3QgcG9seTEyOF90OworI2Vsc2UKK3R5cGVkZWYgaW50OF90IHBvbHk4X3Q7Cit0eXBlZGVmIGludDE2X3QgcG9seTE2X3Q7CisjZW5kaWYKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg4KSkpIGludDhfdCBpbnQ4eDhfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgxNikpKSBpbnQ4X3QgaW50OHgxNl90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgaW50MTZfdCBpbnQxNng0X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoOCkpKSBpbnQxNl90IGludDE2eDhfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgyKSkpIGludDMyX3QgaW50MzJ4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgaW50MzJfdCBpbnQzMng0X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMSkpKSBpbnQ2NF90IGludDY0eDFfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgyKSkpIGludDY0X3QgaW50NjR4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDgpKSkgdWludDhfdCB1aW50OHg4X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMTYpKSkgdWludDhfdCB1aW50OHgxNl90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgdWludDE2X3QgdWludDE2eDRfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSg4KSkpIHVpbnQxNl90IHVpbnQxNng4X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSB1aW50MzJfdCB1aW50MzJ4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgdWludDMyX3QgdWludDMyeDRfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl92ZWN0b3JfdHlwZSgxKSkpIHVpbnQ2NF90IHVpbnQ2NHgxX3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSB1aW50NjRfdCB1aW50NjR4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgZmxvYXQxNl90IGZsb2F0MTZ4NF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDgpKSkgZmxvYXQxNl90IGZsb2F0MTZ4OF90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDIpKSkgZmxvYXQzMl90IGZsb2F0MzJ4Ml90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3ZlY3Rvcl90eXBlKDQpKSkgZmxvYXQzMl90IGZsb2F0MzJ4NF90OworI2lmZGVmIF9fYWFyY2g2NF9fCit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMSkpKSBmbG9hdDY0X3QgZmxvYXQ2NHgxX3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fdmVjdG9yX3R5cGUoMikpKSBmbG9hdDY0X3QgZmxvYXQ2NHgyX3Q7CisjZW5kaWYKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl9wb2x5dmVjdG9yX3R5cGUoOCkpKSBwb2x5OF90IHBvbHk4eDhfdDsKK3R5cGVkZWYgX19hdHRyaWJ1dGVfXygobmVvbl9wb2x5dmVjdG9yX3R5cGUoMTYpKSkgcG9seThfdCBwb2x5OHgxNl90OwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3BvbHl2ZWN0b3JfdHlwZSg0KSkpIHBvbHkxNl90IHBvbHkxNng0X3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fcG9seXZlY3Rvcl90eXBlKDgpKSkgcG9seTE2X3QgcG9seTE2eDhfdDsKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBfX2F0dHJpYnV0ZV9fKChuZW9uX3BvbHl2ZWN0b3JfdHlwZSgxKSkpIHBvbHk2NF90IHBvbHk2NHgxX3Q7Cit0eXBlZGVmIF9fYXR0cmlidXRlX18oKG5lb25fcG9seXZlY3Rvcl90eXBlKDIpKSkgcG9seTY0X3QgcG9seTY0eDJfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBpbnQ4eDh4Ml90IHsKKyAgaW50OHg4X3QgdmFsWzJdOworfSBpbnQ4eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ4eDE2eDJfdCB7CisgIGludDh4MTZfdCB2YWxbMl07Cit9IGludDh4MTZ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng0eDJfdCB7CisgIGludDE2eDRfdCB2YWxbMl07Cit9IGludDE2eDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng4eDJfdCB7CisgIGludDE2eDhfdCB2YWxbMl07Cit9IGludDE2eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMngyeDJfdCB7CisgIGludDMyeDJfdCB2YWxbMl07Cit9IGludDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMng0eDJfdCB7CisgIGludDMyeDRfdCB2YWxbMl07Cit9IGludDMyeDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ2NHgxeDJfdCB7CisgIGludDY0eDFfdCB2YWxbMl07Cit9IGludDY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQ2NHgyeDJfdCB7CisgIGludDY0eDJfdCB2YWxbMl07Cit9IGludDY0eDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHg4eDJfdCB7CisgIHVpbnQ4eDhfdCB2YWxbMl07Cit9IHVpbnQ4eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHgxNngyX3QgeworICB1aW50OHgxNl90IHZhbFsyXTsKK30gdWludDh4MTZ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4NHgyX3QgeworICB1aW50MTZ4NF90IHZhbFsyXTsKK30gdWludDE2eDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4OHgyX3QgeworICB1aW50MTZ4OF90IHZhbFsyXTsKK30gdWludDE2eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MzJ4MngyX3QgeworICB1aW50MzJ4Ml90IHZhbFsyXTsKK30gdWludDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MzJ4NHgyX3QgeworICB1aW50MzJ4NF90IHZhbFsyXTsKK30gdWludDMyeDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MXgyX3QgeworICB1aW50NjR4MV90IHZhbFsyXTsKK30gdWludDY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MngyX3QgeworICB1aW50NjR4Ml90IHZhbFsyXTsKK30gdWludDY0eDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDE2eDR4Ml90IHsKKyAgZmxvYXQxNng0X3QgdmFsWzJdOworfSBmbG9hdDE2eDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDE2eDh4Ml90IHsKKyAgZmxvYXQxNng4X3QgdmFsWzJdOworfSBmbG9hdDE2eDh4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDJ4Ml90IHsKKyAgZmxvYXQzMngyX3QgdmFsWzJdOworfSBmbG9hdDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDR4Ml90IHsKKyAgZmxvYXQzMng0X3QgdmFsWzJdOworfSBmbG9hdDMyeDR4Ml90OworCisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MXgyX3QgeworICBmbG9hdDY0eDFfdCB2YWxbMl07Cit9IGZsb2F0NjR4MXgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MngyX3QgeworICBmbG9hdDY0eDJfdCB2YWxbMl07Cit9IGZsb2F0NjR4MngyX3Q7CisKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgcG9seTh4OHgyX3QgeworICBwb2x5OHg4X3QgdmFsWzJdOworfSBwb2x5OHg4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTh4MTZ4Ml90IHsKKyAgcG9seTh4MTZfdCB2YWxbMl07Cit9IHBvbHk4eDE2eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDR4Ml90IHsKKyAgcG9seTE2eDRfdCB2YWxbMl07Cit9IHBvbHkxNng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTE2eDh4Ml90IHsKKyAgcG9seTE2eDhfdCB2YWxbMl07Cit9IHBvbHkxNng4eDJfdDsKKworI2lmZGVmIF9fYWFyY2g2NF9fCit0eXBlZGVmIHN0cnVjdCBwb2x5NjR4MXgyX3QgeworICBwb2x5NjR4MV90IHZhbFsyXTsKK30gcG9seTY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5NjR4MngyX3QgeworICBwb2x5NjR4Ml90IHZhbFsyXTsKK30gcG9seTY0eDJ4Ml90OworCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IGludDh4OHgzX3QgeworICBpbnQ4eDhfdCB2YWxbM107Cit9IGludDh4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDh4MTZ4M190IHsKKyAgaW50OHgxNl90IHZhbFszXTsKK30gaW50OHgxNngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDE2eDR4M190IHsKKyAgaW50MTZ4NF90IHZhbFszXTsKK30gaW50MTZ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDE2eDh4M190IHsKKyAgaW50MTZ4OF90IHZhbFszXTsKK30gaW50MTZ4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDJ4M190IHsKKyAgaW50MzJ4Ml90IHZhbFszXTsKK30gaW50MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDR4M190IHsKKyAgaW50MzJ4NF90IHZhbFszXTsKK30gaW50MzJ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDF4M190IHsKKyAgaW50NjR4MV90IHZhbFszXTsKK30gaW50NjR4MXgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDJ4M190IHsKKyAgaW50NjR4Ml90IHZhbFszXTsKK30gaW50NjR4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ4eDh4M190IHsKKyAgdWludDh4OF90IHZhbFszXTsKK30gdWludDh4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ4eDE2eDNfdCB7CisgIHVpbnQ4eDE2X3QgdmFsWzNdOworfSB1aW50OHgxNngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng0eDNfdCB7CisgIHVpbnQxNng0X3QgdmFsWzNdOworfSB1aW50MTZ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng4eDNfdCB7CisgIHVpbnQxNng4X3QgdmFsWzNdOworfSB1aW50MTZ4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMngyeDNfdCB7CisgIHVpbnQzMngyX3QgdmFsWzNdOworfSB1aW50MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMng0eDNfdCB7CisgIHVpbnQzMng0X3QgdmFsWzNdOworfSB1aW50MzJ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ2NHgxeDNfdCB7CisgIHVpbnQ2NHgxX3QgdmFsWzNdOworfSB1aW50NjR4MXgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQ2NHgyeDNfdCB7CisgIHVpbnQ2NHgyX3QgdmFsWzNdOworfSB1aW50NjR4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MTZ4NHgzX3QgeworICBmbG9hdDE2eDRfdCB2YWxbM107Cit9IGZsb2F0MTZ4NHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MTZ4OHgzX3QgeworICBmbG9hdDE2eDhfdCB2YWxbM107Cit9IGZsb2F0MTZ4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4MngzX3QgeworICBmbG9hdDMyeDJfdCB2YWxbM107Cit9IGZsb2F0MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4NHgzX3QgeworICBmbG9hdDMyeDRfdCB2YWxbM107Cit9IGZsb2F0MzJ4NHgzX3Q7CisKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgxeDNfdCB7CisgIGZsb2F0NjR4MV90IHZhbFszXTsKK30gZmxvYXQ2NHgxeDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgyeDNfdCB7CisgIGZsb2F0NjR4Ml90IHZhbFszXTsKK30gZmxvYXQ2NHgyeDNfdDsKKworI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBwb2x5OHg4eDNfdCB7CisgIHBvbHk4eDhfdCB2YWxbM107Cit9IHBvbHk4eDh4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5OHgxNngzX3QgeworICBwb2x5OHgxNl90IHZhbFszXTsKK30gcG9seTh4MTZ4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4NHgzX3QgeworICBwb2x5MTZ4NF90IHZhbFszXTsKK30gcG9seTE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4OHgzX3QgeworICBwb2x5MTZ4OF90IHZhbFszXTsKK30gcG9seTE2eDh4M190OworCisjaWZkZWYgX19hYXJjaDY0X18KK3R5cGVkZWYgc3RydWN0IHBvbHk2NHgxeDNfdCB7CisgIHBvbHk2NHgxX3QgdmFsWzNdOworfSBwb2x5NjR4MXgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHk2NHgyeDNfdCB7CisgIHBvbHk2NHgyX3QgdmFsWzNdOworfSBwb2x5NjR4MngzX3Q7CisKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDRfdCB7CisgIGludDh4OF90IHZhbFs0XTsKK30gaW50OHg4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHgxNng0X3QgeworICBpbnQ4eDE2X3QgdmFsWzRdOworfSBpbnQ4eDE2eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4NHg0X3QgeworICBpbnQxNng0X3QgdmFsWzRdOworfSBpbnQxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4OHg0X3QgeworICBpbnQxNng4X3QgdmFsWzRdOworfSBpbnQxNng4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MzJ4Mng0X3QgeworICBpbnQzMngyX3QgdmFsWzRdOworfSBpbnQzMngyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MzJ4NHg0X3QgeworICBpbnQzMng0X3QgdmFsWzRdOworfSBpbnQzMng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MXg0X3QgeworICBpbnQ2NHgxX3QgdmFsWzRdOworfSBpbnQ2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4Mng0X3QgeworICBpbnQ2NHgyX3QgdmFsWzRdOworfSBpbnQ2NHgyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4OHg0X3QgeworICB1aW50OHg4X3QgdmFsWzRdOworfSB1aW50OHg4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4MTZ4NF90IHsKKyAgdWludDh4MTZfdCB2YWxbNF07Cit9IHVpbnQ4eDE2eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDE2eDR4NF90IHsKKyAgdWludDE2eDRfdCB2YWxbNF07Cit9IHVpbnQxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDE2eDh4NF90IHsKKyAgdWludDE2eDhfdCB2YWxbNF07Cit9IHVpbnQxNng4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDJ4NF90IHsKKyAgdWludDMyeDJfdCB2YWxbNF07Cit9IHVpbnQzMngyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDR4NF90IHsKKyAgdWludDMyeDRfdCB2YWxbNF07Cit9IHVpbnQzMng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDF4NF90IHsKKyAgdWludDY0eDFfdCB2YWxbNF07Cit9IHVpbnQ2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDJ4NF90IHsKKyAgdWludDY0eDJfdCB2YWxbNF07Cit9IHVpbnQ2NHgyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQxNng0eDRfdCB7CisgIGZsb2F0MTZ4NF90IHZhbFs0XTsKK30gZmxvYXQxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQxNng4eDRfdCB7CisgIGZsb2F0MTZ4OF90IHZhbFs0XTsKK30gZmxvYXQxNng4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMngyeDRfdCB7CisgIGZsb2F0MzJ4Ml90IHZhbFs0XTsKK30gZmxvYXQzMngyeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQzMng0eDRfdCB7CisgIGZsb2F0MzJ4NF90IHZhbFs0XTsKK30gZmxvYXQzMng0eDRfdDsKKworI2lmZGVmIF9fYWFyY2g2NF9fCit0eXBlZGVmIHN0cnVjdCBmbG9hdDY0eDF4NF90IHsKKyAgZmxvYXQ2NHgxX3QgdmFsWzRdOworfSBmbG9hdDY0eDF4NF90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDY0eDJ4NF90IHsKKyAgZmxvYXQ2NHgyX3QgdmFsWzRdOworfSBmbG9hdDY0eDJ4NF90OworCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IHBvbHk4eDh4NF90IHsKKyAgcG9seTh4OF90IHZhbFs0XTsKK30gcG9seTh4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHk4eDE2eDRfdCB7CisgIHBvbHk4eDE2X3QgdmFsWzRdOworfSBwb2x5OHgxNng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng0eDRfdCB7CisgIHBvbHkxNng0X3QgdmFsWzRdOworfSBwb2x5MTZ4NHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng4eDRfdCB7CisgIHBvbHkxNng4X3QgdmFsWzRdOworfSBwb2x5MTZ4OHg0X3Q7CisKKyNpZmRlZiBfX2FhcmNoNjRfXwordHlwZWRlZiBzdHJ1Y3QgcG9seTY0eDF4NF90IHsKKyAgcG9seTY0eDFfdCB2YWxbNF07Cit9IHBvbHk2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTY0eDJ4NF90IHsKKyAgcG9seTY0eDJfdCB2YWxbNF07Cit9IHBvbHk2NHgyeDRfdDsKKworI2VuZGlmCisKKyNkZWZpbmUgX19haSBzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhYmRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWJkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4MTZfdCBfX25vc3dhcF92YWJkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWJkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhYmRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92YWJkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFiZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWJkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdmFiZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmFiZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2YWJkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHgxNl90IF9fbm9zd2FwX3ZhYmRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZhYmRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2YWJkcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWJkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWJkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmFiZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92YWJkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhYmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhYmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YWJkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZhYmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmFiZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZhYmRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92YWJkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmFiZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZhYmRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZhYmRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZhYmRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YWJkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92YWJkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFiZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZhYmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdmFiZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmFiZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2YWJkX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmFiZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZhYmRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92YWJkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YWJkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmFiZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZhYmRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZhYnNxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmFic3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmFic3FfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2YWJzcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFic3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFic3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWJzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3AwLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWJzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFic19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmFic19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZhYnNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2YWJzX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2YWJzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZhYnNfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YWJzX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZhYnNfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2YWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmFkZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZhZGRxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2YWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2YWRkX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZhZGRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2YWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2YWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2YWRkX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2YWRkX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmFkZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2YWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZhZGRobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92YWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2YWRkaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMngyX3QgX19ub3N3YXBfdmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2YWRkaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50OHg4X3QgX19ub3N3YXBfdmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmFkZGhuX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92YWRkaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2YWRkaG5fczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3ZhZGRobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFkZGhuX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ4eDhfdCBfX25vc3dhcF92YWRkaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhbmRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFuZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhbmRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZhbmRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFuZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFuZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YW5kcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YW5kcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmFuZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZhbmRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YW5kcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhbmRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFuZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YW5kcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhbmRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFuZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2YW5kX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2YW5kX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmFuZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2YW5kX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmFuZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2YW5kX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmFuZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YW5kX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZhbmRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmFuZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZhbmRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YW5kX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmFuZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZhbmRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZhbmRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2YW5kX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZiaWNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZiaWNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmJpY3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZiaWNxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZiaWNxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YmljcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YmljcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmJpY3FfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2YmljcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZiaWNxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmJpY3FfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmJpY3FfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmJpY3FfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmJpY3FfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmJpY3FfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmJpY3FfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmJpY191OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZiaWNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmJpY191MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmJpY191MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2YmljX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2YmljX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgJiB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZiaWNfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZiaWNfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZiaWNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZiaWNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAmIH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmJpY19zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2YmljX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgJiB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZiaWNfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmJpY19zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICYgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZiaWNfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAmIH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmJpY19zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICYgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2YnNsX3A4KHVpbnQ4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSwgcG9seTh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZic2xfcDgodWludDh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxLCBwb2x5OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2YnNsX3AxNih1aW50MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSwgcG9seTE2eDRfdCBfX3AyKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2YnNsX3AxNih1aW50MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSwgcG9seTE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCA1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdmJzbHFfcDgodWludDh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHBvbHk4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2YnNscV9wOCh1aW50OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSwgcG9seTh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2YnNscV9wMTYodWludDE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEsIHBvbHkxNng4X3QgX19wMikgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDM3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2YnNscV9wMTYodWludDE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEsIHBvbHkxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDM3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmJzbHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YnNscV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YnNscV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YnNscV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmJzbHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmJzbHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZic2xxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZic2xxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZic2xxX3M4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZic2xxX3M4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2YnNscV9mMzIodWludDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZic2xxX2YzMih1aW50MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZic2xxX3MzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YnNscV9zMzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YnNscV9zNjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmJzbHFfczY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmJzbHFfczE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92YnNscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZic2xxX3MxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZic2xfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZic2xfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmJzbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZic2xfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmJzbF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEsIHVpbnQ2NHgxX3QgX19wMikgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZic2xfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxLCB1aW50NjR4MV90IF9fcDIpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZic2xfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YnNsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2YnNsX3M4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2YnNsX3M4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZic2xfZjMyKHVpbnQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmJzbF9mMzIodWludDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmJzbF9zMzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZic2xfczMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZic2xfczY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEsIGludDY0eDFfdCBfX3AyKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2YnNsX3M2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxLCBpbnQ2NHgxX3QgX19wMikgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2YnNsX3MxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmJzbF9zMTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92YnNsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjYWdlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjYWdlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2FnZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjYWdlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhZ2VfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjYWd0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FndHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjYWd0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWd0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2FndF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FndF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjYWd0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhZ3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjYWxlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjYWxlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2FsZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjYWxlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhbGVfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjYWx0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjYWx0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2FsdF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjYWx0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNhbHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNlcV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2VxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2VxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZXFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2VxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZXFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2VxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZXFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZXFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2VxcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNlcXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZXFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2VxcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2VxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZXFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZXFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNlcV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZXFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNlcV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNlcV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNlcV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2VxX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNlcV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2VxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2VxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2VxX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2VxX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2dlcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZ2VxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2dlcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2dlcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ2VxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZ2VxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNnZXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNnZXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNnZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2dlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2dlcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNnZXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ2VxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2dlcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2dlX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZ2VfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZ2VfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNnZV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZ2VfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNnZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNnZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNnZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNnZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2dlX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2dlX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2dlX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2d0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNndHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNndHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2d0cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNndHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2d0cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNndHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2d0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3RxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2d0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3RxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZ3RxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ3RxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZ3RxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNndF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjZ3RfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNndF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ3RfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjZ3RfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2d0X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjZ3RfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNndF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZ3RfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ3RfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPiBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2d0X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ3RfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwID4gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNndF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2d0X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbGVxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsZXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjbGVxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbGVxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNsZXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNsZXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2xlcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2xlcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2xlcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbGVxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjbGVxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2xlcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNsZXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjbGVxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjbGVfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNsZV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNsZV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2xlX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNsZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2xlX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2xlX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2xlX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2xlX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGVfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjbGVfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjbGVfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbGVfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmNsc3FfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNxX3YoKGludDh4MTZfdClfX3AwLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2Y2xzcV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmNsc3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xzcV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmNsc3FfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNxX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2Y2xzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNxX3YoKGludDh4MTZfdClfX3AwLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2Y2xzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsc3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmNsc19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsc192KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmNsc19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y2xzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsc192KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjbHNfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2Y2xzX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsc192KChpbnQ4eDhfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZjbHNfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHNfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNsdHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjbHRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjbHRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsdHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjbHRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNsdHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbHRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsdHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2x0cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsdHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2x0cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2x0cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2x0cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2x0cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjbHRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2x0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbHRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x0X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2x0X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNsdF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2x0X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjbHRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2x0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x0X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNsdF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x0X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcmV2MCA8IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjbHRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNsdF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3JldjAgPCBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2x6cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2x6cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2x6cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsenFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjbHpxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2x6cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2Y2x6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZjbHpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3JldjAsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y2x6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpxX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y2x6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZjbHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsenFfdigoaW50OHgxNl90KV9fcDAsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZjbHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNsel91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2x6X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbHpfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2x6X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNsel91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbHpfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmNsel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmNsel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y2x6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjbHpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2Y2x6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsel92KChpbnQ4eDhfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZjbHpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHpfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2Y250X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y250X3YoKGludDh4OF90KV9fcDAsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdmNudF9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y250X3YoKGludDh4OF90KV9fcmV2MCwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZjbnRxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19wMCwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZjbnRxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbnRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjbnRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmNudHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbnRxX3YoKGludDh4MTZfdClfX3AwLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2Y250cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y250cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNudF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y250X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbnRfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2Y250X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y250X3YoKGludDh4OF90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2Y250X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNudF92KChpbnQ4eDhfdClfX3JldjAsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2Y29tYmluZV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2Y29tYmluZV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2Y29tYmluZV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2Y29tYmluZV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjb21iaW5lX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjb21iaW5lX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50OHgxNl90IF9fbm9zd2FwX3Zjb21iaW5lX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNvbWJpbmVfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNvbWJpbmVfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92Y29tYmluZV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjb21iaW5lX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjb21iaW5lX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y29tYmluZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y29tYmluZV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3Zjb21iaW5lX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2Y29tYmluZV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZjb21iaW5lX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHgxNl90IF9fbm9zd2FwX3Zjb21iaW5lX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjb21iaW5lX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y29tYmluZV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MzJ4NF90IF9fbm9zd2FwX3Zjb21iaW5lX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZjb21iaW5lX2YxNihmbG9hdDE2eDRfdCBfX3AwLCBmbG9hdDE2eDRfdCBfX3AxKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2Y29tYmluZV9mMTYoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQxNng0X3QgX19wMSkgeworICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MTZ4OF90IF9fbm9zd2FwX3Zjb21iaW5lX2YxNihmbG9hdDE2eDRfdCBfX3AwLCBmbG9hdDE2eDRfdCBfX3AxKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y29tYmluZV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZjb21iaW5lX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMSwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdmNvbWJpbmVfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZjb21iaW5lX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmNvbWJpbmVfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmNvbWJpbmVfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2Y29tYmluZV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3Zjb21iaW5lX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2Y3JlYXRlX3A4KHVpbnQ2NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdmNyZWF0ZV9wOCh1aW50NjRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZjcmVhdGVfcDE2KHVpbnQ2NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdmNyZWF0ZV9wMTYodWludDY0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNyZWF0ZV91OCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjcmVhdGVfdTgodWludDY0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y3JlYXRlX3UzMih1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjcmVhdGVfdTMyKHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y3JlYXRlX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjcmVhdGVfdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y3JlYXRlX3UxNih1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjcmVhdGVfdTE2KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmNyZWF0ZV9zOCh1aW50NjRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZjcmVhdGVfczgodWludDY0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjcmVhdGVfZjMyKHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmNyZWF0ZV9mMzIodWludDY0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZjcmVhdGVfZjE2KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdmNyZWF0ZV9mMTYodWludDY0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y3JlYXRlX3MzMih1aW50NjRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjcmVhdGVfczMyKHVpbnQ2NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2Y3JlYXRlX3M2NCh1aW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZjcmVhdGVfczY0KHVpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2Y3JlYXRlX3MxNih1aW50NjRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZjcmVhdGVfczE2KHVpbnQ2NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZjdnRfZjE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmN2dF9mMTZfZjMyKChpbnQ4eDE2X3QpX19wMCwgOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZjdnRfZjE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjE2X2YzMigoaW50OHgxNl90KV9fcmV2MCwgOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDE2eDRfdCBfX25vc3dhcF92Y3Z0X2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjE2X2YzMigoaW50OHgxNl90KV9fcDAsIDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjMyX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mMzJfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmN2dHFfZjMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfZjMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX3YoKGludDh4OF90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Y3Z0X2YzMl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2YxNigoaW50OHg4X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mMTYoKGludDh4OF90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMng0X3QgX19ub3N3YXBfdmN2dF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2YzMl9mMTYoKGludDh4OF90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0cV9uX2YzMl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjMyX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX2YzMl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9mMzJfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjMyX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX2YzMl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjMyX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjMyX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRfbl9mMzJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mMzJfdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0X25fZjMyX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjMyX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dF9uX2YzMl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mMzJfdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fczMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9zMzJfdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRxX25fczMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9zMzJfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fczMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3MzMl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fdTMyX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX3UzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl91MzJfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX3UzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3UzMl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fdTMyX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fdTMyX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZjdnRxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfczMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y3Z0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZjdnRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3MzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjdnRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9zMzJfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmN2dHFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3UzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjdnRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHFfdTMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmN2dF91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF91MzJfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjdnRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3UzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZkdXBfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZkdXBfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdmR1cF9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2ZHVwX25fcDE2KHBvbHkxNl90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2ZHVwcV9uX3A4KHBvbHk4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdmR1cHFfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2ZHVwcV9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2ZHVwcV9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmR1cHFfbl91OCh1aW50OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZkdXBxX25fdTgodWludDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmR1cHFfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmR1cHFfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZkdXBxX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZkdXBxX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2ZHVwcV9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2ZHVwcV9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2ZHVwcV9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2ZHVwcV9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2ZHVwcV9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmR1cHFfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmR1cHFfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2ZHVwcV9uX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2ZHVwcV9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZkdXBxX25fczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZkdXBxX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmR1cHFfbl9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmR1cF9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmR1cF9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2ZHVwX25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZkdXBfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZkdXBfbl91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmR1cF9uX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZkdXBfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmR1cF9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZkdXBfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmR1cF9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmR1cF9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmR1cF9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkge19fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmR1cF9uX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZkdXBfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmR1cF9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZkdXBfbl9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZkdXBfbl9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2ZHVwX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2ZW9ycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZlb3JxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2ZW9ycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2ZW9ycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZlb3JxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZlb3JxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmVvcnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmVvcnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZlb3JxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2ZW9ycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmVvcnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2ZW9ycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZlb3JxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmVvcnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2ZW9ycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZlb3JxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmVvcl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmVvcl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZlb3JfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmVvcl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZlb3JfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmVvcl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIF4gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZlb3JfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmVvcl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgXiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2ZW9yX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZlb3JfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCBeIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2ZW9yX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmVvcl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZlb3JfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCBeIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2ZW9yX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2ZW9yX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgXiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmVvcl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIF4gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0cV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0cV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRxX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0cV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZXh0X3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dF9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0X3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZleHRfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Zm1hcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Zm1hcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMng0X3QgX19ub3N3YXBfdmZtYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Zm1hX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Zm1hX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmZtYV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdmdldF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2Z2V0X2hpZ2hfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBwb2x5OHg4X3QgX19ub3N3YXBfdmdldF9oaWdoX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2Z2V0X2hpZ2hfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZnZXRfaGlnaF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZnZXRfaGlnaF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmdldF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZnZXRfaGlnaF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmdldF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Z2V0X2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMngyX3QgX19ub3N3YXBfdmdldF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZnZXRfaGlnaF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmdldF9oaWdoX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Z2V0X2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZnZXRfaGlnaF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZnZXRfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmdldF9oaWdoX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdmdldF9oaWdoX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZnZXRfaGlnaF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdmdldF9oaWdoX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDJfdCBfX25vc3dhcF92Z2V0X2hpZ2hfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdmdldF9oaWdoX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2Z2V0X2hpZ2hfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MTZ4NF90IF9fbm9zd2FwX3ZnZXRfaGlnaF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmdldF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Z2V0X2hpZ2hfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAyLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmdldF9oaWdoX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Z2V0X2hpZ2hfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmdldF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2Z2V0X2hpZ2hfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMTYoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kxNigoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2kxNigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k4KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9mMzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9mMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTMyKChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pMTYoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMzIoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTMyKChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTgoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2YzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjMyKChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfZjMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmdldF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0X2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92Z2V0X2xhbmVfaTE2KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZnZXRfbG93X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2Z2V0X2xvd19wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdmdldF9sb3dfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZnZXRfbG93X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmdldF9sb3dfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZnZXRfbG93X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Z2V0X2xvd191MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmdldF9sb3dfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmdldF9sb3dfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZnZXRfbG93X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Z2V0X2xvd191MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmdldF9sb3dfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZnZXRfbG93X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2Z2V0X2xvd19zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZnZXRfbG93X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Z2V0X2xvd19mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdmdldF9sb3dfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZnZXRfbG93X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSwgMiwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmdldF9sb3dfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZnZXRfbG93X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmdldF9sb3dfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZnZXRfbG93X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZnZXRfbG93X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMCwgMSwgMiwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2Z2V0X2xvd19zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDAsIDEsIDIsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2aGFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2aGFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZoYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2aGFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2aGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmhhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2aGFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmhhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZoYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmhhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2aGFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZoYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmhhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmhhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZoYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZoYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmhhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmhhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmhhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdmhhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2aGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2aGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2aGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2aGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmhzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmhzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2aHN1YnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmhzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmhzdWJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZoc3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdmhzdWJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZoc3VicV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92aHN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2aHN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZoc3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmhzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmhzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2aHN1YnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZoc3ViX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZoc3ViX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2aHN1Yl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2aHN1Yl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZoc3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZoc3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZoc3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92aHN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZoc3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmhzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmhzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdmhzdWJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmhzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdmhzdWJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zoc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgNDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCA5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX3YoX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDQwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgOSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDhfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9kdXBfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCBfX3AyLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCBfX3AyLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM191OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM191OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM191MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM191NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM191MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2R1cF92KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDE4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9wMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X3UxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3UzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfZHVwX3YoJl9fcmV0LCBfX3AwLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIF9fcDIsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMTgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1heHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtYXhxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtYXhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1heHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtYXhxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1heHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm1heHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bWF4cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1heHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtYXhxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtYXhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtYXhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtYXhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtYXhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtYXhfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bWF4X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtYXhfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bWF4X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bWF4X3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1heF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtYXhfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bWF4X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtYXhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1heF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtYXhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bWF4X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1heF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtYXhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1pbnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdm1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtaW5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtaW5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1pbnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtaW5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1pbnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm1pbnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bWlucV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1pbnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtaW5xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtaW5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtaW5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtaW5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtaW5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtaW5fdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bWluX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtaW5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bWluX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bWluX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1pbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtaW5fczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bWluX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtaW5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1pbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtaW5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bWluX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1pbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtaW5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1sYXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bWxhcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxhcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxhcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1sYXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1sYXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm1sYXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3Qgdm1sYXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1sYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bWxhcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sYXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbGFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sYXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtbGFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3Qgdm1sYV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2bWxhX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm1sYV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bWxhX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bWxhX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtbGFfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2bWxhX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bWxhX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm1sYV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtbGFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtbGFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtbGFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bWxhX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bWxhX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYXFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbGFxX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAodWludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbGFxX25fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKHVpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1sYXFfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqICh1aW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1sYXFfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAodWludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm1sYXFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1sYXFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoZmxvYXQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxhcV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoaW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxhcV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWxhcV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoaW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxhcV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm1sYV9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2bWxhX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1sYV9uX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2bWxhX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtbGFfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1sYV9uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtbGFfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogKGludDMyeDJfdCkge19fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm1sYV9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bWxhX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtbGFfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtbHNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3Qgdm1sc3FfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sc3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sc3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbHNxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbHNxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtbHNxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZtbHNxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtbHNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1sc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJ4NF90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbHNxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxzcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtbHNxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bWxzcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtbHNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm1sc191OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtbHNfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1sc191MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1sc191MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2bWxzX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm1sc19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm1sc19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtbHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJ4Ml90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bWxzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fcmV2MjsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bWxzX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bWxzX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1sc19zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm1sc19zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19yZXYyOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxzcV9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKHVpbnQzMng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxzcV9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqICh1aW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbHNxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAodWludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtbHNxX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKHVpbnQxNng4X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtbHNxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtbHNxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sc3Ffbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGludDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sc3Ffbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoaW50MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sc3Ffbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGludDE2eDhfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1sc3Ffbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoaW50MTZ4OF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtbHNfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1sc19uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZtbHNfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1sc19uX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bWxzX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZtbHNfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bWxzX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtbHNfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm1sc19uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bWxzX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZtb3Zfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZtb3Zfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3Qgdm1vdl9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2bW92X25fcDE2KHBvbHkxNl90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2bW92cV9uX3A4KHBvbHk4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3Qgdm1vdnFfbl9wOChwb2x5OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2bW92cV9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2bW92cV9uX3AxNihwb2x5MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm1vdnFfbl91OCh1aW50OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtb3ZxX25fdTgodWludDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1vdnFfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1vdnFfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtb3ZxX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtb3ZxX25fdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bW92cV9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bW92cV9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2bW92cV9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bW92cV9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2bW92cV9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1vdnFfbl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bW92cV9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bW92cV9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1vdnFfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bW92cV9uX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bW92cV9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtb3ZxX25fczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkge19fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtb3ZxX25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1vdnFfbl9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3Qgdm1vdl9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3Qgdm1vdl9uX3U4KHVpbnQ4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bW92X25fdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtb3Zfbl91MzIodWludDMyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZtb3Zfbl91NjQodWludDY0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3Qgdm1vdl9uX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZtb3Zfbl91MTYodWludDE2X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm1vdl9uX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtb3Zfbl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIHtfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm1vdl9uX3M4KGludDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm1vdl9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1vdl9uX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtb3Zfbl9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDE2eDRfdCkge19fczAsIF9fczAsIF9fczAsIF9fczB9OyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1vdl9uX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KSB7X19zMCwgX19zMCwgX19zMCwgX19zMH07IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm1vdl9uX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtb3Zfbl9zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3Qgdm1vdl9uX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZtb3Zfbl9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtb3Zfbl9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSB7X19wMCwgX19wMCwgX19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bW92X25fczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkge19fcDAsIF9fcDAsIF9fcDAsIF9fcDB9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bW92bF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1vdmxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdm1vdmxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1vdmxfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1vdmxfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdm1vdmxfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bW92bF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bW92bF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bW92bF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1vdmxfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1vdmxfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3Ztb3ZsX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcDAsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1vdmxfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bW92bF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1vdmxfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bF92KChpbnQ4eDhfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtb3ZsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1vdmxfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZsX3YoKGludDh4OF90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3Ztb3ZsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdm1vdmxfdigoaW50OHg4X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm1vdm5fdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtb3ZuX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92bW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bW92bl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm1vdm5fdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3Ztb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3Qgdm1vdm5fdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZtb3ZuX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ4eDhfdCBfX25vc3dhcF92bW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtb3ZuX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92bW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bW92bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdm1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bW92bl92KChpbnQ4eDE2X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bW92bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Ztb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdm1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdm1vdm5fdigoaW50OHgxNl90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3Qgdm11bHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bXVscV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bXVscV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bXVscV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm11bHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZtdWxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtdWxxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2bXVscV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtdWxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm11bHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bXVscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZtdWxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZtdWxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2bXVsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZtdWxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bXVsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtdWxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3Qgdm11bF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2bXVsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2bXVsX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bXVsX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtdWxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bXVsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm11bF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtdWxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2bXVsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdm11bF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2bXVsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3Qgdm11bHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdm11bHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZtdWxxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bHFfbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqICh1aW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bHFfbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKHVpbnQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm11bHFfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqICh1aW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm11bHFfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKHVpbnQxNng4X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtdWxxX25fZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoZmxvYXQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm11bHFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIChmbG9hdDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtdWxxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bXVscV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAqIChpbnQzMng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bXVscV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm11bHFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoaW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZtdWxfbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqICh1aW50MzJ4Ml90KSB7X19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm11bF9uX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAodWludDMyeDJfdCkge19fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2bXVsX25fdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAodWludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZtdWxfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKHVpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtdWxfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIChmbG9hdDMyeDJfdCkge19fcDEsIF9fcDF9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bXVsX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoZmxvYXQzMngyX3QpIHtfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2bXVsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiAoaW50MzJ4Ml90KSB7X19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2bXVsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICogKGludDMyeDJfdCkge19fcDEsIF9fcDF9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZtdWxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAqIChpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZtdWxfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZtdWxsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZtdWxsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAzNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBwb2x5MTZ4OF90IF9fbm9zd2FwX3ZtdWxsX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm11bGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm11bGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdm11bGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bXVsbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bXVsbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtdWxsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92bXVsbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm11bGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtdWxsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdm11bGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm11bGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtdWxsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92bXVsbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVsbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm11bGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtdWxsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtdWxsX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKHVpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtdWxsX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkodWludDMyeDJfdCkge19fcDEsIF9fcDF9LCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtdWxsX25fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKHVpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkodWludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KSh1aW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm11bGxfbl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkodWludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm11bGxfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtdWxsX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3Qgdm12bl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2bXZuX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZtdm5xX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZtdm5xX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZtdm5xX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZtdm5xX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtdm5xX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bXZucV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm12bnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtdm5xX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZtdm5xX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZtdm5xX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm12bnFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtdm5xX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtdm5xX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bXZucV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2bXZuX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZtdm5fdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm12bl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3Qgdm12bl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm12bl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3Qgdm12bl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZtdm5fczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm12bl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSB+X19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZtdm5fczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSB+X19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZtdm5fczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IH5fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3Qgdm12bl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IH5fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3Qgdm12bl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gfl9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2bmVncV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bmVncV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3Qgdm5lZ3FfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZuZWdxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZuZWdxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bmVncV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bmVncV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm5lZ3FfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2bmVnX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZuZWdfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZuZWdfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZuZWdfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3Qgdm5lZ19zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm5lZ19zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcmV2MDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2bmVnX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gLV9fcDA7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2bmVnX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2b3JucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2b3JucV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZvcm5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2b3JucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2b3JucV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm9ybnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm9ybnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZvcm5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm9ybnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2b3JucV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZvcm5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZvcm5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZvcm5xX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZvcm5xX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZvcm5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZvcm5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZvcm5fdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2b3JuX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZvcm5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZvcm5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3Qgdm9ybl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3Qgdm9ybl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgfl9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2b3JuX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2b3JuX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2b3JuX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2b3JuX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCB+X19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZvcm5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3Qgdm9ybl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgfl9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2b3JuX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZvcm5fczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IH5fX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2b3JuX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCB+X19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZvcm5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IH5fX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZvcnJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3Qgdm9ycnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZvcnJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZvcnJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm9ycnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm9ycnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2b3JycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2b3JycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm9ycnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZvcnJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2b3JycV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZvcnJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm9ycnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2b3JycV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZvcnJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm9ycnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2b3JyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2b3JyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3Qgdm9ycl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2b3JyX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3Qgdm9ycl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2b3JyX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgfCBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3Qgdm9ycl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2b3JyX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCB8IF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZvcnJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3Qgdm9ycl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIHwgX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZvcnJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2b3JyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3Qgdm9ycl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIHwgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZvcnJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZvcnJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCB8IF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2b3JyX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgfCBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZwYWRhbHFfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnBhZGFscV91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZwYWRhbHFfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZwYWRhbHFfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnBhZGFscV91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnBhZGFscV91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZwYWRhbHFfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZwYWRhbHFfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZwYWRhbHFfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGFscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cGFkYWxxX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnBhZGFscV9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZwYWRhbHFfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnBhZGFsX3U4KHVpbnQxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnBhZGFsX3U4KHVpbnQxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZwYWRhbF91MzIodWludDY0eDFfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnBhZGFsX3UzMih1aW50NjR4MV90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcmV2MSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnBhZGFsX3UxNih1aW50MzJ4Ml90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cGFkYWxfdTE2KHVpbnQzMngyX3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cGFkYWxfczgoaW50MTZ4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cGFkYWxfczgoaW50MTZ4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRhbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZwYWRhbF9zMzIoaW50NjR4MV90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cGFkYWxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnBhZGFsX3MzMihpbnQ2NHgxX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cGFkYWxfczE2KGludDMyeDJfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZwYWRhbF9zMTYoaW50MzJ4Ml90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGFsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnBhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnBhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZwYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZwYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnBhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnBhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnBhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnBhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZwYWRkX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cGFkZF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cGFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnBhZGRscV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZwYWRkbHFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cGFkZGxxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZwYWRkbHFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnBhZGRscV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cGFkZGxxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnBhZGRscV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnBhZGRscV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxxX3YoKGludDh4MTZfdClfX3JldjAsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cGFkZGxxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnBhZGRscV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRscV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnBhZGRscV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZwYWRkbHFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cGFkZGxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cGFkZGxfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZwYWRkbF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnBhZGRsX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnBhZGRsX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cGFkZGxfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnBhZGRsX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkbF92KChpbnQ4eDhfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZwYWRkbF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcmV2MCwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnBhZGRsX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnBhZGRsX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19yZXYwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnBhZGRsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBhZGRsX3YoKGludDh4OF90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnBhZGRsX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGxfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cG1heF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cG1heF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnBtYXhfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnBtYXhfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cG1heF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cG1heF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cG1heF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cG1heF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnBtYXhfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZwbWF4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZwbWF4X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZwbWF4X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZwbWF4X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZwbWF4X3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZwbWluX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZwbWluX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cG1pbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cG1pbl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZwbWluX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZwbWluX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZwbWluX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZwbWluX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cG1pbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnBtaW5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnBtaW5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnBtaW5fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnBtaW5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnBtaW5fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnBtaW5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnFhYnNxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxYWJzcV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxYWJzcV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFhYnNxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxYWJzcV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzcV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFhYnNxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnFhYnNfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cWFic19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzX3YoKGludDh4OF90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFhYnNfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxYWJzX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxYWJzX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cWFic19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnFhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cWFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnFhZGRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZxYWRkcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZxYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cWFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cWFkZHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWFkZHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxYWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cWFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZxYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cWFkZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cWFkZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cWFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cWFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnFhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cWFkZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cWFkZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZxYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbGFsX3MzMihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbGFsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MzMihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sYWxfczE2KF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczE2KF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG1sYWxfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDIsIF9fcDJ9LCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdnFkbWxhbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxhbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbWxhbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sYWxfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0sIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92cWRtbGFsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtbHNsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZxZG1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sc2xfczMyKF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sc2xfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczMyKF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxzbF9zMTYoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMTYoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxzbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbF92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0sIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0sIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtbHNsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbWxzbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG1sc2xfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZxZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdnFkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cWRtdWxoX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFkbXVsaF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4Ml90IF9fbm9zd2FwX3ZxZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxZG11bGhfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cWRtdWxoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnFkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxocV9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxocV9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaHFfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaHFfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGhfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxocV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdCkoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGhxX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdCkoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cWRtdWxocV9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdCkoaW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX0sIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxZG11bGhxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdCkoaW50MTZ4OF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMX0sIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cWRtdWxoX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cWRtdWxoX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxZG11bGhfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxZG11bGhfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZxZG11bGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxZG11bGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFkbXVsbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG11bGxfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpKGludDMyeDJfdCkge19fcDEsIF9fcDF9LCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdCkoaW50MzJ4Ml90KSB7X19wMSwgX19wMX0sIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92cWRtdWxsX25fczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX25fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpKGludDE2eDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFkbXVsbF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdCkoaW50MTZ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxbW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxbW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4NF90IF9fbm9zd2FwX3ZxbW92bl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFtb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFtb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMngyX3QgX19ub3N3YXBfdnFtb3ZuX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxbW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxbW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZxbW92bl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFtb3ZuX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxbW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3JldjAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3ZxbW92bl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxbW92bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cW1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bl92KChpbnQ4eDE2X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92cW1vdm5fczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxbW92bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cW1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5fdigoaW50OHgxNl90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ4eDhfdCBfX25vc3dhcF92cW1vdm5fczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuX3YoKGludDh4MTZfdClfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxbW92dW5fczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cW1vdnVuX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDRfdCBfX25vc3dhcF92cW1vdnVuX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cW1vdnVuX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFtb3Z1bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuX3YoKGludDh4MTZfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMngyX3QgX19ub3N3YXBfdnFtb3Z1bl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cW1vdnVuX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnFtb3Z1bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bl92KChpbnQ4eDE2X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50OHg4X3QgX19ub3N3YXBfdnFtb3Z1bl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5fdigoaW50OHgxNl90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnFuZWdxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcDAsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxbmVncV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxbmVncV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVncV92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFuZWdxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxbmVncV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVncV92KChpbnQ4eDE2X3QpX19wMCwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFuZWdxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnFuZWdfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cW5lZ19zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFuZWdfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZxbmVnX3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxbmVnX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cW5lZ19zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFuZWdfdigoaW50OHg4X3QpX19yZXYwLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cXJkbXVsaHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxcmRtdWxocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdnFyZG11bGhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxocV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxcmRtdWxocV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFyZG11bGhxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92cXJkbXVsaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFyZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFyZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnFyZG11bGhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cXJkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXJkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDRfdCBfX25vc3dhcF92cXJkbXVsaF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxocV9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhxX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFyZG11bGhxX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxoX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXJkbXVsaF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxcmRtdWxocV9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpKGludDMyeDRfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cXJkbXVsaHFfbl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdCkoaW50MzJ4NF90KSB7X19wMSwgX19wMSwgX19wMSwgX19wMX0sIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cXJkbXVsaHFfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KShpbnQxNng4X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnFyZG11bGhxX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpKGludDE2eDhfdCkge19fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDF9LCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFyZG11bGhfbl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cXJkbXVsaF9uX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQzMngyX3QpIHtfX3AxLCBfX3AxfSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFyZG11bGhfbl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXJkbXVsaF9uX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KShpbnQxNng0X3QpIHtfX3AxLCBfX3AxLCBfX3AxLCBfX3AxfSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxcnNobHFfdTgodWludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXJzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZxcnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFyc2hscV91MzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnFyc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cXJzaGxxX3U2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cXJzaGxxX3UxNih1aW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZxcnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnFyc2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnFyc2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFyc2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxcnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cXJzaGxxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFyc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxcnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXJzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnFyc2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxcnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cXJzaGxfdTMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFyc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cXJzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnFyc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnFyc2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxcnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxcnNobF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnFyc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZxcnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFyc2hsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cXJzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZxcnNobF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cXJzaGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxcnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXJzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocnVuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFyc2hydW5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZxcnNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFyc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxc2hscV91OCh1aW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnFzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFzaGxxX3UzMih1aW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZxc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZxc2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cXNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cXNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnFzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxc2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFzaGxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cXNobHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFzaGxxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxc2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnFzaGxfdTgodWludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cXNobF91MzIodWludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZxc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZxc2hsX3U2NCh1aW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnFzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxc2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnFzaGxfdTE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxc2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFzaGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnFzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnFzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cXNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cXNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnFzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hscV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hscV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hscV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hscV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobF9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1cV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdXFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1cV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdXFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1cV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1cV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaGx1X25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHVfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsdV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1X25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdV9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGx1X25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHVfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnFzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocnVuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zxc2hydW5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92cXNocnVuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnFzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cXN1YnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnFzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnFzdWJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZxc3VicV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZxc3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cXN1YnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxc3VicV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXN1YnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFzdWJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cXN1YnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3Zxc3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cXN1YnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxc3VicV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFzdWJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXN1YnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3VicV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3Zxc3VicV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXN1Yl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnFzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnFzdWJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cXN1Yl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cXN1Yl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZxc3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZxc3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxc3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxc3ViX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMngyX3QgX19ub3N3YXBfdnFzdWJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnFzdWJfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cXN1Yl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cXN1Yl9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1Yl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4NF90IF9fbm9zd2FwX3Zxc3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyYWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyYWRkaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdnJhZGRobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmFkZGhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZyYWRkaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmFkZGhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZyYWRkaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnJhZGRobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmFkZGhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92cmFkZGhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYWRkaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdnJhZGRobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJhZGRobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWNwZXFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlY3BlcV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlY3BlcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlY3BlcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVxX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlY3BlX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVjcGVfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVjcGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVfdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWNwZV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcGVfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWNwc3FfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlY3BzcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJlY3BzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlY3BzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJlY3BzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlY3BzX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmV2MTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJldjE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJldjE2cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmV2MTZxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJldjE2cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmV2MTZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmV2MTZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2LCA5LCA4LCAxMSwgMTAsIDEzLCAxMiwgMTUsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZXYxNnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYsIDksIDgsIDExLCAxMCwgMTMsIDEyLCAxNSwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZXYxNl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmV2MTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJldjE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZXYxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJldjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZXYzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZXYzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJldjMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZXYzMnFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJldjMycV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZXYzMnFfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZXYzMnFfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJldjMycV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0LCAxMSwgMTAsIDksIDgsIDE1LCAxNCwgMTMsIDEyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmV2MzJxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0LCAxMSwgMTAsIDksIDgsIDE1LCAxNCwgMTMsIDEyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJldjMycV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMiwgNSwgNCwgNywgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJldjMycV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZXYzMnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwgOCwgMTUsIDE0LCAxMywgMTIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJldjMycV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCwgMTEsIDEwLCA5LCA4LCAxNSwgMTQsIDEzLCAxMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJldjMycV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJldjMycV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIsIDUsIDQsIDcsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZXYzMl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmV2MzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmV2MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDAsIDMsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZXYzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJldjMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZXYzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJldjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCwgMywgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmV2MzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmV2NjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJldjY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJldjY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmV2NjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJldjY0cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmV2NjRxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJldjY0cV9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJldjY0cV9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmV2NjRxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZXY2NHFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmV2NjRxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmV2NjRxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCwgMywgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZXY2NHFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDAsIDcsIDYsIDUsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZXY2NHFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAzLCAyLCAxLCAwLCA3LCA2LCA1LCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmV2NjRxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZXY2NHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJldjY0cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJldjY0cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEsIDAsIDMsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZXY2NHFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwLCAzLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZXY2NHFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwLCAzLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmV2NjRxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmV2NjRxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCwgNywgNiwgNSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJldjY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZXY2NF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZXY2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJldjY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZXY2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJldjY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMywgMiwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmV2NjRfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJldjY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZXY2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJldjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgMSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJldjY0X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmV2NjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCAxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmV2NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZXY2NF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDMsIDIsIDEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmhhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyaGFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmhhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmhhZGRxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyaGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyaGFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmhhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmhhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmhhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJoYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyaGFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmhhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJoYWRkX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmhhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmhhZGRfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyaGFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmhhZGRfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyaGFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJoYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmhhZGRfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJoYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJoYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmhhZGRfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyaGFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyaGFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJoYWRkX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cmhhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cnNobHFfdTgodWludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJzaGxxX3U2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJzaGxxX3U2NCh1aW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyc2hscV91MTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyc2hscV91MTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyc2hscV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJzaGxxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cnNobHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyc2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJzaGxxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cnNobHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyc2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJzaGxfdTgodWludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cnNobF91OCh1aW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyc2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJzaGxfdTMyKHVpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJzaGxfdTY0KHVpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cnNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJzaGxfdTE2KHVpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cnNobF91MTYodWludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJzaGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJzaGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cnNobF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cnNobF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyc2hsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyc2hsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hycV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hycV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocnFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hycV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocnFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hyX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hyX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnJzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnJzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3Zyc2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJzcXJ0ZXFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlcV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyc3FydGVxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJzcXJ0ZXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cnNxcnRlcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyc3FydGVfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cnNxcnRlX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZV92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyc3FydGVfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cnNxcnRlX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyc3FydHNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cnNxcnRzcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyc3FydHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJzcXJ0c19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFxX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFxX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNyYV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc3JhX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyc3ViaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyc3ViaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdnJzdWJobl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cnN1YmhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cnN1YmhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3Zyc3ViaG5fdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cnN1YmhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cnN1YmhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3Zyc3ViaG5fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnJzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92cnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdnJzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnJzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k4KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kzMihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kxNihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pOChfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTgoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9mMzIoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjMyKF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfZjMyKF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kzMihfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2kzMihfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMzIoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pMTYoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTE2KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k4KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kzMihfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2k2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTE2KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fcmV2MSwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pOChfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTgoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9mMzIoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjMyKF9fczAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjMyKF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kzMihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kzMihfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMzIoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2V0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0X2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2kxNihfX3MwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pMTYoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZzaGxxX3U4KHVpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hscV91MzIodWludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNobHFfdTMyKHVpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2c2hscV91NjQodWludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnNobHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c2hscV91MTYodWludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnNobHFfdTE2KHVpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZzaGxxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnNobHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2c2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2c2hscV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2c2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c2hscV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2c2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2c2hscV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2c2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2c2hsX3U4KHVpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2c2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2c2hsX3UzMih1aW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnNobF91NjQodWludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2c2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2c2hsX3UxNih1aW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZzaGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2c2hsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2c2hsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnNobF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZzaGxfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2c2hsX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2c2hsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnNobF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNobF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hscV9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hscV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobHFfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hscV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxxX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobHFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hscV9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hscV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobHFfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobHFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobF9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNobF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzaGxsX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hsbF9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hsbF9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxsX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzaGxsX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNobGxfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocnFfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocnFfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hycV9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJxX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDQ5KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocnFfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hycV9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hycV9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDM0KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJxX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocnFfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNocnFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hycV9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJxX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJxX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMzMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3JldjAsIF9fcDEsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJfbl92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fcmV2MCwgX19wMSwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hyX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocl9uX3YoKGludDh4OF90KV9fczAsIF9fcDEsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyX25fdigoaW50OHg4X3QpX19yZXYwLCBfX3AxLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTcpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMTgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX25fdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hybl9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5fbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92c2hybl9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJuX25fdigoaW50OHgxNl90KV9fczAsIF9fcDEsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2hybl9uX3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDApOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNocm5fbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNocm5fbl92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2xpcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpcV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2xpX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNsaV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYXFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFxX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFxX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhcV9uX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzQpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyYXFfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyYXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM1KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFxX25fczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxOCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyYV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNyYV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JhX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpX25fcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0OSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlxX25fczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaXFfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNCk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlxX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzUpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaXFfbl9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDMzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE2KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDE3KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpX25fczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzcmlfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNyaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNyaV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNyaV9uX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMTgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCBfX3AyLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MSwgX19wMiwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLCBfX3AyLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEsIF9fcDIsIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA1MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAzMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCAzMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0Ml9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M191OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCA1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9wMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA0MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMzQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCBfX3AyLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCBfX3AyLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcDIsIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCA1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDUwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2YzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3AxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDM3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfcDE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDUwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDQ5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgNDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA0MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX2YxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAzNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCBfX3AyLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfZjE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9mMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIF9fcDIsIDEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZzdWJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnN1YnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzdWJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnN1YnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnN1YnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2c3VicV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnN1YnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZzdWJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZzdWJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2c3VicV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2c3VicV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnN1YnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c3VicV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZzdWJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnN1YnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2c3ViX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2c3ViX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnN1Yl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2c3ViX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnN1Yl91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2c3ViX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnN1Yl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2c3ViX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZzdWJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnN1Yl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnN1Yl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnN1Yl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2c3ViX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnN1Yl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZzdWJfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2c3ViX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2c3ViX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnN1Yl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2c3ViaG5fdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng0X3QgX19ub3N3YXBfdnN1YmhuX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnN1YmhuX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4Ml90IF9fbm9zd2FwX3ZzdWJobl91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnN1YmhuX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDh4OF90IF9fbm9zd2FwX3ZzdWJobl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZzdWJobl9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2c3ViaG5fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng0X3QgX19ub3N3YXBfdnN1YmhuX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnN1YmhuX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJobl92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZzdWJobl9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDJfdCBfX25vc3dhcF92c3ViaG5fczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZzdWJobl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnN1YmhuX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2c3ViaG5fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50OHg4X3QgX19ub3N3YXBfdnN1YmhuX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3ViaG5fdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3VibF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF91OChfX3AwKSAtIHZtb3ZsX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzdWJsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF91OChfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfdTgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnN1YmxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfdTMyKF9fcDApIC0gdm1vdmxfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZzdWJsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3UxNihfX3AwKSAtIHZtb3ZsX3UxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c3VibF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF91MTYoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZzdWJsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3M4KF9fcDApIC0gdm1vdmxfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2c3VibF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3M4KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZzdWJsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3MzMihfX3AwKSAtIHZtb3ZsX3MzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZzdWJsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zMzIoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZzdWJsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3MxNihfX3AwKSAtIHZtb3ZsX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zMTYoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX3MxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3Vid191OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzdWJ3X3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZzdWJ3X3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF91MzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnN1YndfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJ3X3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnN1YndfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfdTE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnN1YndfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9zOChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZzdWJ3X3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZzdWJ3X3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c3Vid19zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfczMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnN1YndfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJ3X3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJsMV9wOChwb2x5OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0YmwxX3A4KHBvbHk4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRibDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRibDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJsMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJsMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0YmwyX3A4KHBvbHk4eDh4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJsMl9wOChwb2x5OHg4eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRibDJfdigoaW50OHg4X3QpX19yZXYwLnZhbFswXSwgKGludDh4OF90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0YmwyX3U4KHVpbnQ4eDh4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRibDJfdTgodWludDh4OHgyX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OHgyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwyX3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJsMl9zOChpbnQ4eDh4Ml90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0YmwyX3M4KGludDh4OHgyX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDh4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsMl92KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRibDNfcDgocG9seTh4OHgzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwzX3YoKGludDh4OF90KV9fcDAudmFsWzBdLCAoaW50OHg4X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRibDNfcDgocG9seTh4OHgzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OHgzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsM192KChpbnQ4eDhfdClfX3JldjAudmFsWzBdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0YmwzX3U4KHVpbnQ4eDh4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsM192KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dGJsM191OCh1aW50OHg4eDNfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YmwzX3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRibDNfczgoaW50OHg4eDNfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDNfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0YmwzX3M4KGludDh4OHgzX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDh4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRibDNfdigoaW50OHg4X3QpX19yZXYwLnZhbFswXSwgKGludDh4OF90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDhfdClfX3JldjAudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJsNF9wOChwb2x5OHg4eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRibDRfdigoaW50OHg4X3QpX19wMC52YWxbMF0sIChpbnQ4eDhfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMC52YWxbM10sIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0Ymw0X3A4KHBvbHk4eDh4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDh4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0Ymw0X3U4KHVpbnQ4eDh4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJsNF92KChpbnQ4eDhfdClfX3AwLnZhbFswXSwgKGludDh4OF90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AwLnZhbFszXSwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0Ymw0X3U4KHVpbnQ4eDh4NF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDh4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ0Ymw0X3M4KGludDh4OHg0X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcDAudmFsWzBdLCAoaW50OHg4X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDAudmFsWzNdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0Ymw0X3M4KGludDh4OHg0X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDh4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Ymw0X3YoKGludDh4OF90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDhfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYwLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MC52YWxbM10sIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0YngxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJ4MV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4MV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ0YngxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRieDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJ4MV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnRieDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnRieDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDh4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRieDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDh4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OHgyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJ4Ml91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHgyX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngyX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRieDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDh4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OHgyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dGJ4Ml9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4Ml90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMS52YWxbMF0sIChpbnQ4eDhfdClfX3AxLnZhbFsxXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJ4Ml9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4Ml90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OHgyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dGJ4M19wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OHgzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ0YngzX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4eDNfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDh4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJ4M191OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHgzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dGJ4M191OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHgzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0YngzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MiwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnRieDNfczgoaW50OHg4X3QgX19wMCwgaW50OHg4eDNfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEudmFsWzBdLCAoaW50OHg4X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AxLnZhbFsyXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJ4M19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4M190IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OHgzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4M192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjIsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZ0Yng0X3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnRieDRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEudmFsWzBdLCAoaW50OHg4X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AxLnZhbFsyXSwgKGludDh4OF90KV9fcDEudmFsWzNdLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2dGJ4NF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OHg0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92dGJ4NF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dGJ4NF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OHg0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ0Yng0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDh4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ0Yng0X3M4KGludDh4OF90IF9fcDAsIGludDh4OHg0X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0Yng0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLnZhbFswXSwgKGludDh4OF90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dGJ4NF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDh4NF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OHg0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRieDRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4eDJfdCB2dHJuX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OHgyX3QgdnRybl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NHgyX3QgdnRybl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NHgyX3QgdnRybl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA1KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNngyX3QgdnRybnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZ4Ml90IHZ0cm5xX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4eDJfdCB2dHJucV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDh4Ml90IHZ0cm5xX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM3KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNngyX3QgdnRybnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZ4Ml90IHZ0cm5xX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0eDJfdCB2dHJucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDR4Ml90IHZ0cm5xX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5xX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OHgyX3QgdnRybnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4eDJfdCB2dHJucV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNngyX3QgdnRybnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNngyX3QgdnRybnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NHgyX3QgdnRybnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NHgyX3QgdnRybnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NHgyX3QgdnRybnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDR4Ml90IHZ0cm5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OHgyX3QgdnRybnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybnFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDh4Ml90IHZ0cm5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJucV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OHgyX3QgdnRybl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4eDJfdCB2dHJuX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4MngyX3QgdnRybl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJ4Ml90IHZ0cm5fdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0eDJfdCB2dHJuX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NHgyX3QgdnRybl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4eDJfdCB2dHJuX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4eDJfdCB2dHJuX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJ4Ml90IHZ0cm5fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyeDJfdCB2dHJuX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnRybl92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4MngyX3QgdnRybl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyeDJfdCB2dHJuX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dHJuX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0eDJfdCB2dHJuX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDR4Ml90IHZ0cm5fczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z0cm5fdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dHN0X3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRzdF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2dHN0X3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnRzdF9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnRzdHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ0c3RxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ0c3RxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnRzdHFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ0c3RxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2dHN0cV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2dHN0cV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ0c3RxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2dHN0cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ0c3RxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2dHN0cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ0c3RxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnRzdHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnRzdHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnRzdHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnRzdHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dHN0X3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRzdF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2dHN0X3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnRzdF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnRzdF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ0c3RfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnRzdF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2dHN0X3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnRzdF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2dHN0X3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ0c3RfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnRzdF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OHgyX3QgdnV6cF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDh4Ml90IHZ1enBfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDR4Ml90IHZ1enBfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDR4Ml90IHZ1enBfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgNSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZ4Ml90IHZ1enBxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2eDJfdCB2dXpwcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OHgyX3QgdnV6cHFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4eDJfdCB2dXpwcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZ4Ml90IHZ1enBxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2eDJfdCB2dXpwcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NHgyX3QgdnV6cHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0eDJfdCB2dXpwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDh4Ml90IHZ1enBxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OHgyX3QgdnV6cHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDkpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZ4Ml90IHZ1enBxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZ4Ml90IHZ1enBxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDR4Ml90IHZ1enBxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDR4Ml90IHZ1enBxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDR4Ml90IHZ1enBxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0eDJfdCB2dXpwcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDh4Ml90IHZ1enBxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4eDJfdCB2dXpwcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDh4Ml90IHZ1enBfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OHgyX3QgdnV6cF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJ4Ml90IHZ1enBfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyeDJfdCB2dXpwX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE4KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NHgyX3QgdnV6cF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDR4Ml90IHZ1enBfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTcpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OHgyX3QgdnV6cF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OHgyX3QgdnV6cF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyeDJfdCB2dXpwX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4MngyX3QgdnV6cF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z1enBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJ4Ml90IHZ1enBfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4MngyX3QgdnV6cF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnV6cF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMik7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NHgyX3QgdnV6cF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0eDJfdCB2dXpwX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92dXpwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4eDJfdCB2emlwX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OHgyX3QgdnppcF9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NHgyX3QgdnppcF9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NHgyX3QgdnppcF9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA1KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNngyX3QgdnppcHFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZ4Ml90IHZ6aXBxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4eDJfdCB2emlwcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDh4Ml90IHZ6aXBxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM3KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNngyX3QgdnppcHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZ4Ml90IHZ6aXBxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0eDJfdCB2emlwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDR4Ml90IHZ6aXBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBxX3YoJl9fcmV0LCAoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OHgyX3QgdnppcHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4eDJfdCB2emlwcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNngyX3QgdnppcHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNngyX3QgdnppcHFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NHgyX3QgdnppcHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NHgyX3QgdnppcHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NHgyX3QgdnppcHFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDR4Ml90IHZ6aXBxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNCk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OHgyX3QgdnppcHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcHFfdigmX19yZXQsIChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDh4Ml90IHZ6aXBxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwcV92KCZfX3JldCwgKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OHgyX3QgdnppcF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4eDJfdCB2emlwX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4MngyX3QgdnppcF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJ4Ml90IHZ6aXBfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMTgpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0eDJfdCB2emlwX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NHgyX3QgdnppcF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDR4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4eDJfdCB2emlwX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4eDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4eDJfdCB2emlwX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDh4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJ4Ml90IHZ6aXBfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyeDJfdCB2emlwX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyeDJfdCBfX3JldDsKKyAgX19idWlsdGluX25lb25fdnppcF92KCZfX3JldCwgKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOworICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4MngyX3QgdnppcF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyeDJfdCB2emlwX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJ4Ml90IF9fcmV0OworICBfX2J1aWx0aW5fbmVvbl92emlwX3YoJl9fcmV0LCAoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKworICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7CisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0eDJfdCB2emlwX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDR4Ml90IHZ6aXBfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NHgyX3QgX19yZXQ7CisgIF9fYnVpbHRpbl9uZW9uX3Z6aXBfdigmX19yZXQsIChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDEpOworCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIID49IDgKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmN2dGFxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3MzMl92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmN2dGFxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZjdnRhX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dGFfczMyX3YoKGludDh4OF90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmN2dGFfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dGFfczMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjdnRhcV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3UzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjdnRhcV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV91MzJfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y3Z0YV91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dGFfdTMyX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y3Z0YV91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3UzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2Y3Z0bXFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfczMyX3YoKGludDh4MTZfdClfX3AwLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2Y3Z0bXFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3MzMl92KChpbnQ4eDE2X3QpX19yZXYwLCAzNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmN2dG1fczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV9zMzJfdigoaW50OHg4X3QpX19wMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2Y3Z0bV9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV9zMzJfdigoaW50OHg4X3QpX19yZXYwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmN2dG1xX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfdTMyX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmN2dG1xX3UzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3UzMl92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjdnRtX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV91MzJfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjdnRtX3UzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dG1fdTMyX3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZjdnRucV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV9zMzJfdigoaW50OHgxNl90KV9fcDAsIDM0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZjdnRucV9zMzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfczMyX3YoKGludDh4MTZfdClfX3JldjAsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2Y3Z0bl9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3MzMl92KChpbnQ4eDhfdClfX3AwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZjdnRuX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3MzMl92KChpbnQ4eDhfdClfX3JldjAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y3Z0bnFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV91MzJfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y3Z0bnFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfdTMyX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmN2dG5fdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3UzMl92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmN2dG5fdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl91MzJfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmN2dHBxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3MzMl92KChpbnQ4eDE2X3QpX19wMCwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmN2dHBxX3MzMl9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV9zMzJfdigoaW50OHgxNl90KV9fcmV2MCwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZjdnRwX3MzMl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHBfczMyX3YoKGludDh4OF90KV9fcDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmN2dHBfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHBfczMyX3YoKGludDh4OF90KV9fcmV2MCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjdnRwcV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3UzMl92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjdnRwcV91MzJfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV91MzJfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y3Z0cF91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHBfdTMyX3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y3Z0cF91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3UzMl92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgX19BUk1fQVJDSCA+PSA4ICYmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9ESVJFQ1RFRF9ST1VORElORykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cm5kcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRxX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZybmRxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRxX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cm5kX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZybmRhcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cm5kYXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZGFxX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRhX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZGFfdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRhX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cm5kbXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kbXFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJuZG1xX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cm5kbV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtX3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cm5kbV9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbV92KChpbnQ4eDhfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJuZG5xX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZG5xX3YoKGludDh4MTZfdClfX3AwLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZybmRucV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kbnFfdigoaW50OHgxNl90KV9fcmV2MCwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJuZG5fZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbl92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJuZG5fZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZG5fdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZybmRwcV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwcV92KChpbnQ4eDE2X3QpX19wMCwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cm5kcHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnJuZHBxX3YoKGludDh4MTZfdClfX3JldjAsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRwX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZHBfdigoaW50OHg4X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZybmRwX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRwX3YoKGludDh4OF90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cm5keHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5keHFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJuZHhxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cm5keF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4X3YoKGludDh4OF90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cm5keF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5keF92KChpbnQ4eDhfdClfX3JldjAsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBfX0FSTV9BUkNIID49IDggJiYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX05VTUVSSUNfTUFYTUlOKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtYXhubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1heG5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1heG5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm1heG5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1heG5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1heG5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtaW5ubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3Qgdm1pbm5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm1pbm5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3Qgdm1pbm5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm1pbm5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3Qgdm1pbm5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1fdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgX19BUk1fQVJDSCA+PSA4ICYmIGRlZmluZWQoX19hYXJjaDY0X18pCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZjdnRhcV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhcV9zNjRfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZjdnRhcV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfczY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2Y3Z0YV9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZjdnRhX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dGFfczY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmN2dGFxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXFfdTY0X3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmN2dGFxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dGFxX3U2NF92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjdnRhX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjdnRhX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YV91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2Y3Z0bXFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bXFfczY0X3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2Y3Z0bXFfczY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3M2NF92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdmN2dG1fczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bV9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2Y3Z0bV9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjdnRtcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG1xX3U2NF92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjdnRtcV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtcV91NjRfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y3Z0bV91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG1fdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y3Z0bV91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG1fdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmN2dG5xX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dG5xX3M2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdmN2dG5xX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZjdnRuX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dG5fczY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmN2dG5fczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bl9zNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y3Z0bnFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRucV91NjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y3Z0bnFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnFfdTY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmN2dG5fdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmN2dG5fdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuX3U2NF92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZjdnRwcV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwcV9zNjRfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZjdnRwcV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfczY0X3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2Y3Z0cF9zNjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwX3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZjdnRwX3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dHBfczY0X3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmN2dHBxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHFfdTY0X3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmN2dHBxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHBxX3U2NF92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjdnRwX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjdnRwX3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cF91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyZWludGVycHJldF9wOF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3MxNihpbnQxNng0X3QgX19wMCkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdnJlaW50ZXJwcmV0X3A2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2cmVpbnRlcnByZXRfcDY0X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZyZWludGVycHJldF9wNjRfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTgodWludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczgoaW50OHg4X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTI4X3QgdnJlaW50ZXJwcmV0cV9wMTI4X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2cmVpbnRlcnByZXRxX3AxMjhfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxMjhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTEyOF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTEyOF90IHZyZWludGVycHJldHFfcDEyOF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2cmVpbnRlcnByZXRxX3A2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnJlaW50ZXJwcmV0cV9wNjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZyZWludGVycHJldHFfcDY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyZWludGVycHJldHFfczhfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zOChpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9mNjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyZWludGVycHJldHFfZjY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVpbnRlcnByZXRxX2Y2NF9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDEyOChwb2x5MTI4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDE2KHBvbHkxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9mMTYoZmxvYXQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3MzMihpbnQzMng0X3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4OF90IHZyZWludGVycHJldHFfZjE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDhfdCB2cmVpbnRlcnByZXRxX2YxNl9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdnJlaW50ZXJwcmV0cV9mMTZfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTI4KHBvbHkxMjhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3AxMjgocG9seTEyOF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3AxNihwb2x5MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyZWludGVycHJldF91OF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZyZWludGVycHJldF91NjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZyZWludGVycHJldF9zOF9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZyZWludGVycHJldF9mNjRfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlaW50ZXJwcmV0X2Y2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cmVpbnRlcnByZXRfZjY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczgoaW50OHg4X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MTZ4NF90IHZyZWludGVycHJldF9mMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng0X3QgdnJlaW50ZXJwcmV0X2YxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDE2eDRfdCB2cmVpbnRlcnByZXRfZjE2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBmbG9hdDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQzMngyX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDJfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wNjQocG9seTY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTgodWludDh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91NjQodWludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZyZWludGVycHJldF9zNjRfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YxNihmbG9hdDE2eDRfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDgocG9seTh4OF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wOChwb2x5OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfcDY0KHBvbHk2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3AxNihwb2x5MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wMTYocG9seTE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91OCh1aW50OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfZjE2KGZsb2F0MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9mMTYoZmxvYXQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4NF90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng0X3QpKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2VuZGlmCisjaWYgX19BUk1fQVJDSCA+PSA4ICYmIGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9ESVJFQ1RFRF9ST1VORElORykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cm5kcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZybmRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZybmRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJuZF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZybmRhcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cm5kYXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZGFxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZybmRhX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZGFfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cm5kYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRhX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cm5kaXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kaXFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJuZGlxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cm5kaXFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cm5kaXFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnJuZGlxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cm5kaV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRpX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJuZGlfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kaV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnJuZGlfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kaV92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnJuZGlfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnJuZGlfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZybmRtcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cm5kbXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZG1xX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZybmRtX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZG1fdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cm5kbV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRtX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cm5kbnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kbnFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJuZG5xX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRucV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cm5kbl9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmRuX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJuZG5fZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kbl92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJuZHBxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZHBxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZybmRwcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cm5kcHFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJuZHBfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cm5kcF92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZybmRwX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZHBfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZybmR4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4cV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cm5keHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJuZHhxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZybmR4X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJuZHhfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cm5keF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZybmR4X3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmIF9fQVJNX0FSQ0ggPj0gOCAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKSAmJiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfTlVNRVJJQ19NQVhNSU4pCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1heG5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bWF4bm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bWF4bm1fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm1fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm1heG5tX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1heG5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1pbm5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bWlubm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bWlubm1fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bWlubm1fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm1pbm5tX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1pbm5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBfX0FSTV9GRUFUVVJFX0NSWVBUTworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFlc2RxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmFlc2RxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2YWVzZXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc2VxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWVzZXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmFlc2VxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhZXNpbWNxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzaW1jcV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZhZXNpbWNxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzaW1jcV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZhZXNtY3FfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZXNtY3FfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWVzbWNxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92YWVzbWNxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTFjcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFjcV91MzIoKGludDh4MTZfdClfX3AwLCBfX3AxLCAoaW50OHgxNl90KV9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGExY3FfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExY3FfdTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAoaW50OHgxNl90KV9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2c2hhMWhfdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92c2hhMWhfdTMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2c2hhMWhfdTMyKHVpbnQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92c2hhMWhfdTMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNoYTFtcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFtcV91MzIoKGludDh4MTZfdClfX3AwLCBfX3AxLCAoaW50OHgxNl90KV9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGExbXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExbXFfdTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAoaW50OHgxNl90KV9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGExcHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyX3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExcHFfdTMyKChpbnQ4eDE2X3QpX19wMCwgX19wMSwgKGludDh4MTZfdClfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMXBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMXBxX3UzMigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgKGludDh4MTZfdClfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMXN1MHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFzdTBxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGExc3UwcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMXN1MHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGExc3UxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTFzdTFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMXN1MXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGExc3UxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c2hhMjU2aHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NmhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGEyNTZocV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2aHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGEyNTZoMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNoYTI1NmgycV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c2hhMjU2aDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZoMnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGEyNTZzdTBxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c2hhMjU2c3UwcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNoYTI1NnN1MHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZzdTBxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzaGEyNTZzdTFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZzdTFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzaGEyNTZzdTFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGEyNTZzdTFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfUVJETVgpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxcmRtbGFocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFhZGRxX3MzMihfX3AwLCB2cXJkbXVsaHFfczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZxcmRtbGFocV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cXJkbWxhaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZxYWRkcV9zMTYoX19wMCwgdnFyZG11bGhxX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cXJkbWxhaHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnFyZG1sYWhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IHZxYWRkX3MzMihfX3AwLCB2cXJkbXVsaF9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnFyZG1sYWhfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZxcmRtbGFoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cWFkZF9zMTYoX19wMCwgdnFyZG11bGhfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZxcmRtbGFoX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFhZGRxX3MzMihfX3MwLCB2cXJkbXVsaHFfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaHFfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkcV9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkcV9zMTYoX19zMCwgdnFyZG11bGhxX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhxX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZHFfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sYWhfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkX3MzMihfX3MwLCB2cXJkbXVsaF9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWFkZF9zMTYoX19zMCwgdnFyZG11bGhfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFyZG1sc2hxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cXN1YnFfczMyKF9fcDAsIHZxcmRtdWxocV9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFyZG1sc2hxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1YnFfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhxX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZxcmRtbHNocV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFzdWJxX3MxNihfX3AwLCB2cXJkbXVsaHFfczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxcmRtbHNocV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDJfdCB2cXJkbWxzaF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFzdWJfczMyKF9fcDAsIHZxcmRtdWxoX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2cXJkbWxzaF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFyZG11bGhfczMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng0X3QgdnFyZG1sc2hfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IHZxc3ViX3MxNihfX3AwLCB2cXJkbXVsaF9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnFyZG1sc2hfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zxc3ViX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hxX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cXN1YnFfczMyKF9fczAsIHZxcmRtdWxocV9zMzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJxX3MxNihfX3MwLCB2cXJkbXVsaHFfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxzaHFfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3Zxc3VicV9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaHFfczE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJfczMyKF9fczAsIHZxcmRtdWxoX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3Zxc3ViX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxoX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3ViX3MxNihfX3MwLCB2cXJkbXVsaF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX1FSRE1YKSAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkcV9zMzIoX19zMCwgdnFyZG11bGhxX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxYWRkcV9zMTYoX19zMCwgdnFyZG11bGhxX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFhZGRxX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFhZGRfczMyKF9fczAsIHZxcmRtdWxoX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFhZGRfczE2KF9fczAsIHZxcmRtdWxoX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWFkZF9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3VicV9zMzIoX19zMCwgdnFyZG11bGhxX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNocV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxc3VicV9zMTYoX19zMCwgdnFyZG11bGhxX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFzdWJxX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJfczMyKF9fczAsIHZxcmRtdWxoX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMzIoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFzdWJfczE2KF9fczAsIHZxcmRtdWxoX3MxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXN1Yl9zMTYoX19yZXYwLCBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2VuZGlmCisjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2YWJkcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmFiZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2YWJkX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2YWJkX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmFiZF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2YWJkZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2YWJkZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWJkZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZhYmRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZhYmRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYmRzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2YWJzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZhYnNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWJzcV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNxX3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWJzcV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmFic3FfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmFic19mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2YWJzX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmFic192KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZhYnNfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92YWJzX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdmFic19zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2YWJzZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2YWJzZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhYnNkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2YWRkcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmFkZHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2YWRkX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2YWRkX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZhZGRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2YWRkZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmFkZGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhZGRobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZhZGRobl91MzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhZGRobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdmFkZGhuX3UzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWRkaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2YWRkaG5fdTY0KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWRkaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl91NjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFkZGhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZhZGRobl91MTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZhZGRobl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdmFkZGhuX3UxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhZGRobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdmFkZGhuX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWRkaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdmFkZGhuX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhZGRobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdmFkZGhuX3M2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWRkaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdmFkZGhuX3M2NChfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZhZGRobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZhZGRobl9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdmFkZGhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3ZhZGRobl9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZhZGRsdnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV91OCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2YWRkbHZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfdTgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZhZGRsdnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfdTMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZhZGRsdnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfdTMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2YWRkbHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3UxNigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2YWRkbHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3UxNigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2YWRkbHZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2YWRkbHZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV9zOCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2YWRkbHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZxX3MzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZhZGRsdnFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV9zMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmFkZGx2cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2cV9zMTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2YWRkbHZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdnFfczE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2YWRkbHZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTgoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2YWRkbHZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl91OCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2YWRkbHZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl91MzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2YWRkbHZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl91MzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmFkZGx2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTE2KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmFkZGx2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfdTE2KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdmFkZGx2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3M4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2YWRkbHZfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3M4KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmFkZGx2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkbHZfczMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2YWRkbHZfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3MzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZhZGRsdl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmFkZGx2X3MxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdmFkZGx2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGRsdl9zMTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2YWRkdnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91OCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZhZGR2cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZxX3U4KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2YWRkdnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91MzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmFkZHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2YWRkdnFfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91NjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmFkZHZxX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2YWRkdnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV91MTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdmFkZHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfdTE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdmFkZHZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZhZGR2cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2YWRkdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZhZGR2cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2YWRkdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9mMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZhZGR2cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9mMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmFkZHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdmFkZHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9zMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmFkZHZxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmFkZHZxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9zNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdmFkZHZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdnFfczE2KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdmFkZHZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2cV9zMTYoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdmFkZHZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZfdTgoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZhZGR2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdmFkZHZfdTgoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmFkZHZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3UzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZhZGR2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl91MzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdmFkZHZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3UxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZhZGR2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl91MTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZhZGR2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3M4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZhZGR2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zOCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdmFkZHZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2YWRkdl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZhZGR2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZhZGR2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3MzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZhZGR2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92YWRkdl9zMTYoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZhZGR2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZhZGR2X3MxNigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZic2xfcDY0KHVpbnQ2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxLCBwb2x5NjR4MV90IF9fcDIpIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZic2xfcDY0KHVpbnQ2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxLCBwb2x5NjR4MV90IF9fcDIpIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdmJzbHFfcDY0KHVpbnQ2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxLCBwb2x5NjR4Ml90IF9fcDIpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdmJzbHFfcDY0KHVpbnQ2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxLCBwb2x5NjR4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2YnNscV9mNjQodWludDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmJzbHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZic2xxX2Y2NCh1aW50NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Zic2xxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmJzbF9mNjQodWludDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmJzbF9mNjQodWludDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmJzbF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjYWdlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjYWdlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2FnZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjYWdlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNhZ2VkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2FnZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNhZ2VzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FnZXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2FnZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWdlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2FndHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhZ3RxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2FndHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FndHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNhZ3RfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhZ3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2FndF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FndF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjYWd0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhZ3RkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNhZ3RkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FndGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjYWd0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhZ3RzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNhZ3RzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FndHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNhbGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNhbGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNhbGVxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjYWxlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNhbGVfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNhbGVfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2FsZWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjYWxlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNhbGVkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2FsZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWxlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjYWxlc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNhbGVzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjYWx0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjYWx0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2FsdF9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjYWx0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNhbHRkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2FsdGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0ZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNhbHRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2FsdHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2FsdHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjYWx0c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2VxX3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXFfcDY0KHBvbHk2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2VxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZXFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID09IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZXFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPT0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA9PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2VxcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID09IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXFfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNlcV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXFfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2VxX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPT0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2VxX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2VxX3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA9PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2VxZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNlcWRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2VxZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcWRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjZXFkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNlcWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNlcWRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXFkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2Vxc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNlcXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2Vxc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNlcXNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2Vxel9wOChwb2x5OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNlcXpfcDgocG9seTh4OF90IF9fcDApIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXF6X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXF6X3A2NChwb2x5NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfcDE2KHBvbHkxNng0X3QgX19wMCkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2VxenFfcDgocG9seTh4MTZfdCBfX3AwKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZXF6cV9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZXF6cV9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZXF6cV9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjZXF6cV9wMTYocG9seTE2eDhfdCBfX3AwKSB7CisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjZXF6cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2VxenFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxenFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2VxenFfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxenFfdTY0KHVpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2VxenFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2VxenFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2VxenFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNlcXpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZXF6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZXF6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNlcXpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2VxenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNlcXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2VxenFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNlcXpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2VxenFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2Vxel91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNlcXpfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjZXF6X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZXF6X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXF6X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXF6X3U2NCh1aW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNlcXpfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2Vxel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2Vxel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZXF6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2Vxel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2Vxel9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNlcXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2Vxel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZXF6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2Vxel9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZXF6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2Vxel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2Vxel9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNlcXpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjZXF6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNlcXpkX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcXpkX3U2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNlcXpkX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcXpkX3U2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjZXF6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNlcXpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcXpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2VxemRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNlcXpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNlcXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNlcXpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZXF6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjZXF6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2VxenNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPj0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2dlcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ2VxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwID49IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ2VxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2dlcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPj0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNnZV91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2dlX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNnZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZ2VfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA+PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ2VfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZ2VfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID49IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNnZWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2dlZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZWRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjZ2VkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZWRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2dlZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2VkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2dlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2dlZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNnZWRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjZ2VzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2dlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjZ2VzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2dlc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2dlenFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNnZXpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ2V6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNnZXpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjZ2V6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNnZXpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2dlenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNnZXpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2dlenFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNnZXpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2dlenFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNnZXpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2dlel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2dlel9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ2V6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2dlel9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlel9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNnZXpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2dlel9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ2V6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2dlel9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjZ2V6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2dlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2dlel9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNnZXpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjZ2V6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2dlemRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlemRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjZ2V6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNnZXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ2V6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjZ2V6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2dlemRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjZ2V6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2dlenNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2dlenNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNnZXpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3RxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNndHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3RxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2d0cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3RxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA+IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjZ3RxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA+IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ3RfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2d0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2d0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2d0X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjZ3RfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwID4gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNndF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPiBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjZ3RkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNndGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2d0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNndGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0ZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNndGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNndGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3RkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2d0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNndHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2d0c19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNndHNfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmNndHpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZjZ3R6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3R6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2d0enFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3R6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0enFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2d0enFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZjZ3R6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNndHpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjZ3R6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNndHpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZjZ3R6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNndHpxX3YoKGludDh4MTZfdClfX3AwLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmNndHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmNndHpfczgoaW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdmNndHpfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2d0el9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNndHpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNndHpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjZ3R6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdmNndHpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2d0el9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3JldjAsIDE4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNndHpfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2d0el9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNndHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmNndHpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6X3YoKGludDh4OF90KV9fcDAsIDE3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2Y2d0el9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0el92KChpbnQ4eDhfdClfX3JldjAsIDE3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNndHpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNndHpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2d0emRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0emRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjZ3R6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2d0emRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2d0emRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNndHpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y2d0enNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNndHpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNndHpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjZ3R6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2xlcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA8PSBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2xlcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDw9IF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZjbGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3JldjAgPD0gX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbGVxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcmV2MCA8PSBfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2xlX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbGVfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2xlX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNsZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KShfX3AwIDw9IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsZV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNsZV9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPD0gX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNsZWRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjbGVkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmNsZWRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y2xlZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZWRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjbGVkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjbGVkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNsZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmNsZXNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGVzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZjbGV6cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcDAsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2Y2xlenFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2xlenFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3AwLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsZXpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2xlenFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsZXpxX3YoKGludDh4MTZfdClfX3AwLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmNsZXpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2Y2xlenFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbGV6cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2Y2xlenFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbGV6cV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2Y2xlenFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6cV92KChpbnQ4eDE2X3QpX19wMCwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZjbGV6cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenFfdigoaW50OHgxNl90KV9fcmV2MCwgNDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZjbGV6X3M4KGludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZjbGV6X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3JldjAsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsZXpfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbGV6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGV6X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2Y2xlel9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZjbGV6X3MzMihpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsZXpfczMyKGludDMyeDJfdCBfX3AwKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19yZXYwLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbGV6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdmNsZXpfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZjbGV6X3MxNihpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2xlel92KChpbnQ4eDhfdClfX3AwLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdmNsZXpfczE2KGludDE2eDRfdCBfX3AwKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsZXpfdigoaW50OHg4X3QpX19yZXYwLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjbGV6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNsZXpkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZXpkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2xlemRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsZXpkX2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmNsZXpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmNsZXpzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbGV6c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjbGV6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2xlenNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2x0cV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbHRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX3AwIDwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19yZXYwIDwgX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsdF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbHRfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbHRfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbHRfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmNsdF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpKF9fcDAgPCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2x0X3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkoX19wMCA8IF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjbHRkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2x0ZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjbHRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0ZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmNsdGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHRkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y2x0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y2x0ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmNsdGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjbHRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2x0c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjbHRzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2x0c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2Y2x0enFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3AwLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdmNsdHpxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHpxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjbHR6cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsdHpxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6cV92KChpbnQ4eDE2X3QpX19wMCwgNTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZjbHR6cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmNsdHpxX3MzMihpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2Y2x0enFfczMyKGludDMyeDRfdCBfX3AwKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmNsdHpxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2Y2x0enFfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmNsdHpxX3MxNihpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enFfdigoaW50OHgxNl90KV9fcDAsIDQ5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2Y2x0enFfczE2KGludDE2eDhfdCBfX3AwKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdmNsdHpxX3YoKGludDh4MTZfdClfX3JldjAsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2Y2x0el9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2Y2x0el9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19yZXYwLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZjbHR6X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2Y2x0el9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2x0el9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmNsdHpfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2Y2x0el9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZjbHR6X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcmV2MCwgMTgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2Y2x0el9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjbHR6X3M2NChpbnQ2NHgxX3QgX19wMCkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y2x0el92KChpbnQ4eDhfdClfX3AwLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2Y2x0el9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdmNsdHpfdigoaW50OHg4X3QpX19wMCwgMTcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZjbHR6X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6X3YoKGludDh4OF90KV9fcmV2MCwgMTcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y2x0emRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0emRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjbHR6ZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6ZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmNsdHpkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjbHR6ZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjbHR6ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y2x0emRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjbHR6c19mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y2x0enNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y2x0enNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmNsdHpzX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZjb21iaW5lX3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZjb21iaW5lX3A2NChwb2x5NjR4MV90IF9fcDAsIHBvbHk2NHgxX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmNvbWJpbmVfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZjb21iaW5lX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDgoX19wMF8wLCBfX3AxXzAsIF9fcDJfMCwgX19wM18wKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwXzAgPSBfX3AwXzA7IFwKKyAgcG9seTh4OF90IF9fczJfMCA9IF9fcDJfMDsgXAorICBwb2x5OHgxNl90IF9fcmV0XzA7IFwKKyAgX19yZXRfMCA9IHZzZXRxX2xhbmVfcDgodmdldF9sYW5lX3A4KF9fczJfMCwgX19wM18wKSwgX19zMF8wLCBfX3AxXzApOyBcCisgIF9fcmV0XzA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV9wOChfX3AwXzEsIF9fcDFfMSwgX19wMl8xLCBfX3AzXzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczBfMSA9IF9fcDBfMTsgXAorICBwb2x5OHg4X3QgX19zMl8xID0gX19wMl8xOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwXzE7ICBfX3JldjBfMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMSwgX19zMF8xLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXYyXzE7ICBfX3JldjJfMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMSwgX19zMl8xLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0XzE7IFwKKyAgX19yZXRfMSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDgoX19ub3N3YXBfdmdldF9sYW5lX3A4KF9fcmV2Ml8xLCBfX3AzXzEpLCBfX3JldjBfMSwgX19wMV8xKTsgXAorICBfX3JldF8xID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMSwgX19yZXRfMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDE2KF9fcDBfMiwgX19wMV8yLCBfX3AyXzIsIF9fcDNfMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMF8yID0gX19wMF8yOyBcCisgIHBvbHkxNng0X3QgX19zMl8yID0gX19wMl8yOyBcCisgIHBvbHkxNng4X3QgX19yZXRfMjsgXAorICBfX3JldF8yID0gdnNldHFfbGFuZV9wMTYodmdldF9sYW5lX3AxNihfX3MyXzIsIF9fcDNfMiksIF9fczBfMiwgX19wMV8yKTsgXAorICBfX3JldF8yOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfcDE2KF9fcDBfMywgX19wMV8zLCBfX3AyXzMsIF9fcDNfMykgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMF8zID0gX19wMF8zOyBcCisgIHBvbHkxNng0X3QgX19zMl8zID0gX19wMl8zOyBcCisgIHBvbHkxNng4X3QgX19yZXYwXzM7ICBfX3JldjBfMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMywgX19zMF8zLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV2Ml8zOyAgX19yZXYyXzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzMsIF9fczJfMywgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldF8zOyBcCisgIF9fcmV0XzMgPSBfX25vc3dhcF92c2V0cV9sYW5lX3AxNihfX25vc3dhcF92Z2V0X2xhbmVfcDE2KF9fcmV2Ml8zLCBfX3AzXzMpLCBfX3JldjBfMywgX19wMV8zKTsgXAorICBfX3JldF8zID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMywgX19yZXRfMywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTgoX19wMF80LCBfX3AxXzQsIF9fcDJfNCwgX19wM180KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwXzQgPSBfX3AwXzQ7IFwKKyAgdWludDh4OF90IF9fczJfNCA9IF9fcDJfNDsgXAorICB1aW50OHgxNl90IF9fcmV0XzQ7IFwKKyAgX19yZXRfNCA9IHZzZXRxX2xhbmVfdTgodmdldF9sYW5lX3U4KF9fczJfNCwgX19wM180KSwgX19zMF80LCBfX3AxXzQpOyBcCisgIF9fcmV0XzQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV91OChfX3AwXzUsIF9fcDFfNSwgX19wMl81LCBfX3AzXzUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczBfNSA9IF9fcDBfNTsgXAorICB1aW50OHg4X3QgX19zMl81ID0gX19wMl81OyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwXzU7ICBfX3JldjBfNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNSwgX19zMF81LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXYyXzU7ICBfX3JldjJfNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNSwgX19zMl81LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0XzU7IFwKKyAgX19yZXRfNSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTgoX19ub3N3YXBfdmdldF9sYW5lX3U4KF9fcmV2Ml81LCBfX3AzXzUpLCBfX3JldjBfNSwgX19wMV81KTsgXAorICBfX3JldF81ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNSwgX19yZXRfNSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTMyKF9fcDBfNiwgX19wMV82LCBfX3AyXzYsIF9fcDNfNikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF82ID0gX19wMF82OyBcCisgIHVpbnQzMngyX3QgX19zMl82ID0gX19wMl82OyBcCisgIHVpbnQzMng0X3QgX19yZXRfNjsgXAorICBfX3JldF82ID0gdnNldHFfbGFuZV91MzIodmdldF9sYW5lX3UzMihfX3MyXzYsIF9fcDNfNiksIF9fczBfNiwgX19wMV82KTsgXAorICBfX3JldF82OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTMyKF9fcDBfNywgX19wMV83LCBfX3AyXzcsIF9fcDNfNykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF83ID0gX19wMF83OyBcCisgIHVpbnQzMngyX3QgX19zMl83ID0gX19wMl83OyBcCisgIHVpbnQzMng0X3QgX19yZXYwXzc7ICBfX3JldjBfNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNywgX19zMF83LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2Ml83OyAgX19yZXYyXzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzcsIF9fczJfNywgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldF83OyBcCisgIF9fcmV0XzcgPSBfX25vc3dhcF92c2V0cV9sYW5lX3UzMihfX25vc3dhcF92Z2V0X2xhbmVfdTMyKF9fcmV2Ml83LCBfX3AzXzcpLCBfX3JldjBfNywgX19wMV83KTsgXAorICBfX3JldF83ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNywgX19yZXRfNywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTY0KF9fcDBfOCwgX19wMV84LCBfX3AyXzgsIF9fcDNfOCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMF84ID0gX19wMF84OyBcCisgIHVpbnQ2NHgxX3QgX19zMl84ID0gX19wMl84OyBcCisgIHVpbnQ2NHgyX3QgX19yZXRfODsgXAorICBfX3JldF84ID0gdnNldHFfbGFuZV91NjQodmdldF9sYW5lX3U2NChfX3MyXzgsIF9fcDNfOCksIF9fczBfOCwgX19wMV84KTsgXAorICBfX3JldF84OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTY0KF9fcDBfOSwgX19wMV85LCBfX3AyXzksIF9fcDNfOSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMF85ID0gX19wMF85OyBcCisgIHVpbnQ2NHgxX3QgX19zMl85ID0gX19wMl85OyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwXzk7ICBfX3JldjBfOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfOSwgX19zMF85LCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0Xzk7IFwKKyAgX19yZXRfOSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfdTY0KF9fbm9zd2FwX3ZnZXRfbGFuZV91NjQoX19zMl85LCBfX3AzXzkpLCBfX3JldjBfOSwgX19wMV85KTsgXAorICBfX3JldF85ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfOSwgX19yZXRfOSwgMSwgMCk7IFwKKyAgX19yZXRfOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTE2KF9fcDBfMTAsIF9fcDFfMTAsIF9fcDJfMTAsIF9fcDNfMTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczBfMTAgPSBfX3AwXzEwOyBcCisgIHVpbnQxNng0X3QgX19zMl8xMCA9IF9fcDJfMTA7IFwKKyAgdWludDE2eDhfdCBfX3JldF8xMDsgXAorICBfX3JldF8xMCA9IHZzZXRxX2xhbmVfdTE2KHZnZXRfbGFuZV91MTYoX19zMl8xMCwgX19wM18xMCksIF9fczBfMTAsIF9fcDFfMTApOyBcCisgIF9fcmV0XzEwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTE2KF9fcDBfMTEsIF9fcDFfMTEsIF9fcDJfMTEsIF9fcDNfMTEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczBfMTEgPSBfX3AwXzExOyBcCisgIHVpbnQxNng0X3QgX19zMl8xMSA9IF9fcDJfMTE7IFwKKyAgdWludDE2eDhfdCBfX3JldjBfMTE7ICBfX3JldjBfMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzExLCBfX3MwXzExLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2Ml8xMTsgIF9fcmV2Ml8xMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTEsIF9fczJfMTEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMTE7IFwKKyAgX19yZXRfMTEgPSBfX25vc3dhcF92c2V0cV9sYW5lX3UxNihfX25vc3dhcF92Z2V0X2xhbmVfdTE2KF9fcmV2Ml8xMSwgX19wM18xMSksIF9fcmV2MF8xMSwgX19wMV8xMSk7IFwKKyAgX19yZXRfMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMSwgX19yZXRfMTEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzExOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZV9zOChfX3AwXzEyLCBfX3AxXzEyLCBfX3AyXzEyLCBfX3AzXzEyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczBfMTIgPSBfX3AwXzEyOyBcCisgIGludDh4OF90IF9fczJfMTIgPSBfX3AyXzEyOyBcCisgIGludDh4MTZfdCBfX3JldF8xMjsgXAorICBfX3JldF8xMiA9IHZzZXRxX2xhbmVfczgodmdldF9sYW5lX3M4KF9fczJfMTIsIF9fcDNfMTIpLCBfX3MwXzEyLCBfX3AxXzEyKTsgXAorICBfX3JldF8xMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3M4KF9fcDBfMTMsIF9fcDFfMTMsIF9fcDJfMTMsIF9fcDNfMTMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMF8xMyA9IF9fcDBfMTM7IFwKKyAgaW50OHg4X3QgX19zMl8xMyA9IF9fcDJfMTM7IFwKKyAgaW50OHgxNl90IF9fcmV2MF8xMzsgIF9fcmV2MF8xMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTMsIF9fczBfMTMsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV2Ml8xMzsgIF9fcmV2Ml8xMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTMsIF9fczJfMTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF8xMzsgXAorICBfX3JldF8xMyA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczgoX19ub3N3YXBfdmdldF9sYW5lX3M4KF9fcmV2Ml8xMywgX19wM18xMyksIF9fcmV2MF8xMywgX19wMV8xMyk7IFwKKyAgX19yZXRfMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMywgX19yZXRfMTMsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzEzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZV9mMzIoX19wMF8xNCwgX19wMV8xNCwgX19wMl8xNCwgX19wM18xNCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfMTQgPSBfX3AwXzE0OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfMTQgPSBfX3AyXzE0OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0XzE0OyBcCisgIF9fcmV0XzE0ID0gdnNldHFfbGFuZV9mMzIodmdldF9sYW5lX2YzMihfX3MyXzE0LCBfX3AzXzE0KSwgX19zMF8xNCwgX19wMV8xNCk7IFwKKyAgX19yZXRfMTQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZV9mMzIoX19wMF8xNSwgX19wMV8xNSwgX19wMl8xNSwgX19wM18xNSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfMTUgPSBfX3AwXzE1OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfMTUgPSBfX3AyXzE1OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MF8xNTsgIF9fcmV2MF8xNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTUsIF9fczBfMTUsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2Ml8xNTsgIF9fcmV2Ml8xNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTUsIF9fczJfMTUsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0XzE1OyBcCisgIF9fcmV0XzE1ID0gX19ub3N3YXBfdnNldHFfbGFuZV9mMzIoX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3JldjJfMTUsIF9fcDNfMTUpLCBfX3JldjBfMTUsIF9fcDFfMTUpOyBcCisgIF9fcmV0XzE1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTUsIF9fcmV0XzE1LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfczMyKF9fcDBfMTYsIF9fcDFfMTYsIF9fcDJfMTYsIF9fcDNfMTYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMF8xNiA9IF9fcDBfMTY7IFwKKyAgaW50MzJ4Ml90IF9fczJfMTYgPSBfX3AyXzE2OyBcCisgIGludDMyeDRfdCBfX3JldF8xNjsgXAorICBfX3JldF8xNiA9IHZzZXRxX2xhbmVfczMyKHZnZXRfbGFuZV9zMzIoX19zMl8xNiwgX19wM18xNiksIF9fczBfMTYsIF9fcDFfMTYpOyBcCisgIF9fcmV0XzE2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfczMyKF9fcDBfMTcsIF9fcDFfMTcsIF9fcDJfMTcsIF9fcDNfMTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMF8xNyA9IF9fcDBfMTc7IFwKKyAgaW50MzJ4Ml90IF9fczJfMTcgPSBfX3AyXzE3OyBcCisgIGludDMyeDRfdCBfX3JldjBfMTc7ICBfX3JldjBfMTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE3LCBfX3MwXzE3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyXzE3OyAgX19yZXYyXzE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xNywgX19zMl8xNywgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzE3OyBcCisgIF9fcmV0XzE3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zMzIoX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjJfMTcsIF9fcDNfMTcpLCBfX3JldjBfMTcsIF9fcDFfMTcpOyBcCisgIF9fcmV0XzE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTcsIF9fcmV0XzE3LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfczY0KF9fcDBfMTgsIF9fcDFfMTgsIF9fcDJfMTgsIF9fcDNfMTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMF8xOCA9IF9fcDBfMTg7IFwKKyAgaW50NjR4MV90IF9fczJfMTggPSBfX3AyXzE4OyBcCisgIGludDY0eDJfdCBfX3JldF8xODsgXAorICBfX3JldF8xOCA9IHZzZXRxX2xhbmVfczY0KHZnZXRfbGFuZV9zNjQoX19zMl8xOCwgX19wM18xOCksIF9fczBfMTgsIF9fcDFfMTgpOyBcCisgIF9fcmV0XzE4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfczY0KF9fcDBfMTksIF9fcDFfMTksIF9fcDJfMTksIF9fcDNfMTkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMF8xOSA9IF9fcDBfMTk7IFwKKyAgaW50NjR4MV90IF9fczJfMTkgPSBfX3AyXzE5OyBcCisgIGludDY0eDJfdCBfX3JldjBfMTk7ICBfX3JldjBfMTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5LCBfX3MwXzE5LCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXRfMTk7IFwKKyAgX19yZXRfMTkgPSBfX25vc3dhcF92c2V0cV9sYW5lX3M2NChfX25vc3dhcF92Z2V0X2xhbmVfczY0KF9fczJfMTksIF9fcDNfMTkpLCBfX3JldjBfMTksIF9fcDFfMTkpOyBcCisgIF9fcmV0XzE5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTksIF9fcmV0XzE5LCAxLCAwKTsgXAorICBfX3JldF8xOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfczE2KF9fcDBfMjAsIF9fcDFfMjAsIF9fcDJfMjAsIF9fcDNfMjApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMF8yMCA9IF9fcDBfMjA7IFwKKyAgaW50MTZ4NF90IF9fczJfMjAgPSBfX3AyXzIwOyBcCisgIGludDE2eDhfdCBfX3JldF8yMDsgXAorICBfX3JldF8yMCA9IHZzZXRxX2xhbmVfczE2KHZnZXRfbGFuZV9zMTYoX19zMl8yMCwgX19wM18yMCksIF9fczBfMjAsIF9fcDFfMjApOyBcCisgIF9fcmV0XzIwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfczE2KF9fcDBfMjEsIF9fcDFfMjEsIF9fcDJfMjEsIF9fcDNfMjEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMF8yMSA9IF9fcDBfMjE7IFwKKyAgaW50MTZ4NF90IF9fczJfMjEgPSBfX3AyXzIxOyBcCisgIGludDE2eDhfdCBfX3JldjBfMjE7ICBfX3JldjBfMjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxLCBfX3MwXzIxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyXzIxOyAgX19yZXYyXzIxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yMSwgX19zMl8yMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIxOyBcCisgIF9fcmV0XzIxID0gX19ub3N3YXBfdnNldHFfbGFuZV9zMTYoX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3JldjJfMjEsIF9fcDNfMjEpLCBfX3JldjBfMjEsIF9fcDFfMjEpOyBcCisgIF9fcmV0XzIxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjEsIF9fcmV0XzIxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9wOChfX3AwXzIyLCBfX3AxXzIyLCBfX3AyXzIyLCBfX3AzXzIyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczBfMjIgPSBfX3AwXzIyOyBcCisgIHBvbHk4eDhfdCBfX3MyXzIyID0gX19wMl8yMjsgXAorICBwb2x5OHg4X3QgX19yZXRfMjI7IFwKKyAgX19yZXRfMjIgPSB2c2V0X2xhbmVfcDgodmdldF9sYW5lX3A4KF9fczJfMjIsIF9fcDNfMjIpLCBfX3MwXzIyLCBfX3AxXzIyKTsgXAorICBfX3JldF8yMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfcDgoX19wMF8yMywgX19wMV8yMywgX19wMl8yMywgX19wM18yMykgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwXzIzID0gX19wMF8yMzsgXAorICBwb2x5OHg4X3QgX19zMl8yMyA9IF9fcDJfMjM7IFwKKyAgcG9seTh4OF90IF9fcmV2MF8yMzsgIF9fcmV2MF8yMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjMsIF9fczBfMjMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldjJfMjM7ICBfX3JldjJfMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzIzLCBfX3MyXzIzLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHg4X3QgX19yZXRfMjM7IFwKKyAgX19yZXRfMjMgPSBfX25vc3dhcF92c2V0X2xhbmVfcDgoX19ub3N3YXBfdmdldF9sYW5lX3A4KF9fcmV2Ml8yMywgX19wM18yMyksIF9fcmV2MF8yMywgX19wMV8yMyk7IFwKKyAgX19yZXRfMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMywgX19yZXRfMjMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3AxNihfX3AwXzI0LCBfX3AxXzI0LCBfX3AyXzI0LCBfX3AzXzI0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwXzI0ID0gX19wMF8yNDsgXAorICBwb2x5MTZ4NF90IF9fczJfMjQgPSBfX3AyXzI0OyBcCisgIHBvbHkxNng0X3QgX19yZXRfMjQ7IFwKKyAgX19yZXRfMjQgPSB2c2V0X2xhbmVfcDE2KHZnZXRfbGFuZV9wMTYoX19zMl8yNCwgX19wM18yNCksIF9fczBfMjQsIF9fcDFfMjQpOyBcCisgIF9fcmV0XzI0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9wMTYoX19wMF8yNSwgX19wMV8yNSwgX19wMl8yNSwgX19wM18yNSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMF8yNSA9IF9fcDBfMjU7IFwKKyAgcG9seTE2eDRfdCBfX3MyXzI1ID0gX19wMl8yNTsgXAorICBwb2x5MTZ4NF90IF9fcmV2MF8yNTsgIF9fcmV2MF8yNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjUsIF9fczBfMjUsIDMsIDIsIDEsIDApOyBcCisgIHBvbHkxNng0X3QgX19yZXYyXzI1OyAgX19yZXYyXzI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNSwgX19zMl8yNSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDRfdCBfX3JldF8yNTsgXAorICBfX3JldF8yNSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9wMTYoX19ub3N3YXBfdmdldF9sYW5lX3AxNihfX3JldjJfMjUsIF9fcDNfMjUpLCBfX3JldjBfMjUsIF9fcDFfMjUpOyBcCisgIF9fcmV0XzI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjUsIF9fcmV0XzI1LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV91OChfX3AwXzI2LCBfX3AxXzI2LCBfX3AyXzI2LCBfX3AzXzI2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMjYgPSBfX3AwXzI2OyBcCisgIHVpbnQ4eDhfdCBfX3MyXzI2ID0gX19wMl8yNjsgXAorICB1aW50OHg4X3QgX19yZXRfMjY7IFwKKyAgX19yZXRfMjYgPSB2c2V0X2xhbmVfdTgodmdldF9sYW5lX3U4KF9fczJfMjYsIF9fcDNfMjYpLCBfX3MwXzI2LCBfX3AxXzI2KTsgXAorICBfX3JldF8yNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfdTgoX19wMF8yNywgX19wMV8yNywgX19wMl8yNywgX19wM18yNykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzI3ID0gX19wMF8yNzsgXAorICB1aW50OHg4X3QgX19zMl8yNyA9IF9fcDJfMjc7IFwKKyAgdWludDh4OF90IF9fcmV2MF8yNzsgIF9fcmV2MF8yNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjcsIF9fczBfMjcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldjJfMjc7ICBfX3JldjJfMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI3LCBfX3MyXzI3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXRfMjc7IFwKKyAgX19yZXRfMjcgPSBfX25vc3dhcF92c2V0X2xhbmVfdTgoX19ub3N3YXBfdmdldF9sYW5lX3U4KF9fcmV2Ml8yNywgX19wM18yNyksIF9fcmV2MF8yNywgX19wMV8yNyk7IFwKKyAgX19yZXRfMjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNywgX19yZXRfMjcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzI3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3UzMihfX3AwXzI4LCBfX3AxXzI4LCBfX3AyXzI4LCBfX3AzXzI4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzI4ID0gX19wMF8yODsgXAorICB1aW50MzJ4Ml90IF9fczJfMjggPSBfX3AyXzI4OyBcCisgIHVpbnQzMngyX3QgX19yZXRfMjg7IFwKKyAgX19yZXRfMjggPSB2c2V0X2xhbmVfdTMyKHZnZXRfbGFuZV91MzIoX19zMl8yOCwgX19wM18yOCksIF9fczBfMjgsIF9fcDFfMjgpOyBcCisgIF9fcmV0XzI4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV91MzIoX19wMF8yOSwgX19wMV8yOSwgX19wMl8yOSwgX19wM18yOSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8yOSA9IF9fcDBfMjk7IFwKKyAgdWludDMyeDJfdCBfX3MyXzI5ID0gX19wMl8yOTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MF8yOTsgIF9fcmV2MF8yOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjksIF9fczBfMjksIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyXzI5OyAgX19yZXYyXzI5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yOSwgX19zMl8yOSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldF8yOTsgXAorICBfX3JldF8yOSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV91MzIoX19ub3N3YXBfdmdldF9sYW5lX3UzMihfX3JldjJfMjksIF9fcDNfMjkpLCBfX3JldjBfMjksIF9fcDFfMjkpOyBcCisgIF9fcmV0XzI5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjksIF9fcmV0XzI5LCAxLCAwKTsgXAorICBfX3JldF8yOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV91NjQoX19wMF8zMCwgX19wMV8zMCwgX19wMl8zMCwgX19wM18zMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMF8zMCA9IF9fcDBfMzA7IFwKKyAgdWludDY0eDFfdCBfX3MyXzMwID0gX19wMl8zMDsgXAorICB1aW50NjR4MV90IF9fcmV0XzMwOyBcCisgIF9fcmV0XzMwID0gdnNldF9sYW5lX3U2NCh2Z2V0X2xhbmVfdTY0KF9fczJfMzAsIF9fcDNfMzApLCBfX3MwXzMwLCBfX3AxXzMwKTsgXAorICBfX3JldF8zMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfdTY0KF9fcDBfMzEsIF9fcDFfMzEsIF9fcDJfMzEsIF9fcDNfMzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczBfMzEgPSBfX3AwXzMxOyBcCisgIHVpbnQ2NHgxX3QgX19zMl8zMSA9IF9fcDJfMzE7IFwKKyAgdWludDY0eDFfdCBfX3JldF8zMTsgXAorICBfX3JldF8zMSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV91NjQoX19ub3N3YXBfdmdldF9sYW5lX3U2NChfX3MyXzMxLCBfX3AzXzMxKSwgX19zMF8zMSwgX19wMV8zMSk7IFwKKyAgX19yZXRfMzE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfdTE2KF9fcDBfMzIsIF9fcDFfMzIsIF9fcDJfMzIsIF9fcDNfMzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMzIgPSBfX3AwXzMyOyBcCisgIHVpbnQxNng0X3QgX19zMl8zMiA9IF9fcDJfMzI7IFwKKyAgdWludDE2eDRfdCBfX3JldF8zMjsgXAorICBfX3JldF8zMiA9IHZzZXRfbGFuZV91MTYodmdldF9sYW5lX3UxNihfX3MyXzMyLCBfX3AzXzMyKSwgX19zMF8zMiwgX19wMV8zMik7IFwKKyAgX19yZXRfMzI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX3UxNihfX3AwXzMzLCBfX3AxXzMzLCBfX3AyXzMzLCBfX3AzXzMzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzMzID0gX19wMF8zMzsgXAorICB1aW50MTZ4NF90IF9fczJfMzMgPSBfX3AyXzMzOyBcCisgIHVpbnQxNng0X3QgX19yZXYwXzMzOyAgX19yZXYwXzMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8zMywgX19zMF8zMywgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjJfMzM7ICBfX3JldjJfMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzMzLCBfX3MyXzMzLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0XzMzOyBcCisgIF9fcmV0XzMzID0gX19ub3N3YXBfdnNldF9sYW5lX3UxNihfX25vc3dhcF92Z2V0X2xhbmVfdTE2KF9fcmV2Ml8zMywgX19wM18zMyksIF9fcmV2MF8zMywgX19wMV8zMyk7IFwKKyAgX19yZXRfMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8zMywgX19yZXRfMzMsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzMzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3M4KF9fcDBfMzQsIF9fcDFfMzQsIF9fcDJfMzQsIF9fcDNfMzQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzM0ID0gX19wMF8zNDsgXAorICBpbnQ4eDhfdCBfX3MyXzM0ID0gX19wMl8zNDsgXAorICBpbnQ4eDhfdCBfX3JldF8zNDsgXAorICBfX3JldF8zNCA9IHZzZXRfbGFuZV9zOCh2Z2V0X2xhbmVfczgoX19zMl8zNCwgX19wM18zNCksIF9fczBfMzQsIF9fcDFfMzQpOyBcCisgIF9fcmV0XzM0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9zOChfX3AwXzM1LCBfX3AxXzM1LCBfX3AyXzM1LCBfX3AzXzM1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8zNSA9IF9fcDBfMzU7IFwKKyAgaW50OHg4X3QgX19zMl8zNSA9IF9fcDJfMzU7IFwKKyAgaW50OHg4X3QgX19yZXYwXzM1OyAgX19yZXYwXzM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8zNSwgX19zMF8zNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXYyXzM1OyAgX19yZXYyXzM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8zNSwgX19zMl8zNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHg4X3QgX19yZXRfMzU7IFwKKyAgX19yZXRfMzUgPSBfX25vc3dhcF92c2V0X2xhbmVfczgoX19ub3N3YXBfdmdldF9sYW5lX3M4KF9fcmV2Ml8zNSwgX19wM18zNSksIF9fcmV2MF8zNSwgX19wMV8zNSk7IFwKKyAgX19yZXRfMzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8zNSwgX19yZXRfMzUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzM1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX2YzMihfX3AwXzM2LCBfX3AxXzM2LCBfX3AyXzM2LCBfX3AzXzM2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMF8zNiA9IF9fcDBfMzY7IFwKKyAgZmxvYXQzMngyX3QgX19zMl8zNiA9IF9fcDJfMzY7IFwKKyAgZmxvYXQzMngyX3QgX19yZXRfMzY7IFwKKyAgX19yZXRfMzYgPSB2c2V0X2xhbmVfZjMyKHZnZXRfbGFuZV9mMzIoX19zMl8zNiwgX19wM18zNiksIF9fczBfMzYsIF9fcDFfMzYpOyBcCisgIF9fcmV0XzM2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9mMzIoX19wMF8zNywgX19wMV8zNywgX19wMl8zNywgX19wM18zNykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfMzcgPSBfX3AwXzM3OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfMzcgPSBfX3AyXzM3OyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MF8zNzsgIF9fcmV2MF8zNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMzcsIF9fczBfMzcsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2Ml8zNzsgIF9fcmV2Ml8zNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMzcsIF9fczJfMzcsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzM3OyBcCisgIF9fcmV0XzM3ID0gX19ub3N3YXBfdnNldF9sYW5lX2YzMihfX25vc3dhcF92Z2V0X2xhbmVfZjMyKF9fcmV2Ml8zNywgX19wM18zNyksIF9fcmV2MF8zNywgX19wMV8zNyk7IFwKKyAgX19yZXRfMzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8zNywgX19yZXRfMzcsIDEsIDApOyBcCisgIF9fcmV0XzM3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3MzMihfX3AwXzM4LCBfX3AxXzM4LCBfX3AyXzM4LCBfX3AzXzM4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMzggPSBfX3AwXzM4OyBcCisgIGludDMyeDJfdCBfX3MyXzM4ID0gX19wMl8zODsgXAorICBpbnQzMngyX3QgX19yZXRfMzg7IFwKKyAgX19yZXRfMzggPSB2c2V0X2xhbmVfczMyKHZnZXRfbGFuZV9zMzIoX19zMl8zOCwgX19wM18zOCksIF9fczBfMzgsIF9fcDFfMzgpOyBcCisgIF9fcmV0XzM4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9zMzIoX19wMF8zOSwgX19wMV8zOSwgX19wMl8zOSwgX19wM18zOSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzM5ID0gX19wMF8zOTsgXAorICBpbnQzMngyX3QgX19zMl8zOSA9IF9fcDJfMzk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MF8zOTsgIF9fcmV2MF8zOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMzksIF9fczBfMzksIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjJfMzk7ICBfX3JldjJfMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzM5LCBfX3MyXzM5LCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXRfMzk7IFwKKyAgX19yZXRfMzkgPSBfX25vc3dhcF92c2V0X2xhbmVfczMyKF9fbm9zd2FwX3ZnZXRfbGFuZV9zMzIoX19yZXYyXzM5LCBfX3AzXzM5KSwgX19yZXYwXzM5LCBfX3AxXzM5KTsgXAorICBfX3JldF8zOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzM5LCBfX3JldF8zOSwgMSwgMCk7IFwKKyAgX19yZXRfMzk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfczY0KF9fcDBfNDAsIF9fcDFfNDAsIF9fcDJfNDAsIF9fcDNfNDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMF80MCA9IF9fcDBfNDA7IFwKKyAgaW50NjR4MV90IF9fczJfNDAgPSBfX3AyXzQwOyBcCisgIGludDY0eDFfdCBfX3JldF80MDsgXAorICBfX3JldF80MCA9IHZzZXRfbGFuZV9zNjQodmdldF9sYW5lX3M2NChfX3MyXzQwLCBfX3AzXzQwKSwgX19zMF80MCwgX19wMV80MCk7IFwKKyAgX19yZXRfNDA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX3M2NChfX3AwXzQxLCBfX3AxXzQxLCBfX3AyXzQxLCBfX3AzXzQxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczBfNDEgPSBfX3AwXzQxOyBcCisgIGludDY0eDFfdCBfX3MyXzQxID0gX19wMl80MTsgXAorICBpbnQ2NHgxX3QgX19yZXRfNDE7IFwKKyAgX19yZXRfNDEgPSBfX25vc3dhcF92c2V0X2xhbmVfczY0KF9fbm9zd2FwX3ZnZXRfbGFuZV9zNjQoX19zMl80MSwgX19wM180MSksIF9fczBfNDEsIF9fcDFfNDEpOyBcCisgIF9fcmV0XzQxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lX3MxNihfX3AwXzQyLCBfX3AxXzQyLCBfX3AyXzQyLCBfX3AzXzQyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfNDIgPSBfX3AwXzQyOyBcCisgIGludDE2eDRfdCBfX3MyXzQyID0gX19wMl80MjsgXAorICBpbnQxNng0X3QgX19yZXRfNDI7IFwKKyAgX19yZXRfNDIgPSB2c2V0X2xhbmVfczE2KHZnZXRfbGFuZV9zMTYoX19zMl80MiwgX19wM180MiksIF9fczBfNDIsIF9fcDFfNDIpOyBcCisgIF9fcmV0XzQyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZV9zMTYoX19wMF80MywgX19wMV80MywgX19wMl80MywgX19wM180MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzQzID0gX19wMF80MzsgXAorICBpbnQxNng0X3QgX19zMl80MyA9IF9fcDJfNDM7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF80MzsgIF9fcmV2MF80MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNDMsIF9fczBfNDMsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjJfNDM7ICBfX3JldjJfNDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzQzLCBfX3MyXzQzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXRfNDM7IFwKKyAgX19yZXRfNDMgPSBfX25vc3dhcF92c2V0X2xhbmVfczE2KF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYyXzQzLCBfX3AzXzQzKSwgX19yZXYwXzQzLCBfX3AxXzQzKTsgXAorICBfX3JldF80MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzQzLCBfX3JldF80MywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNDM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9wOChfX3AwXzQ0LCBfX3AxXzQ0LCBfX3AyXzQ0LCBfX3AzXzQ0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwXzQ0ID0gX19wMF80NDsgXAorICBwb2x5OHgxNl90IF9fczJfNDQgPSBfX3AyXzQ0OyBcCisgIHBvbHk4eDE2X3QgX19yZXRfNDQ7IFwKKyAgX19yZXRfNDQgPSB2c2V0cV9sYW5lX3A4KHZnZXRxX2xhbmVfcDgoX19zMl80NCwgX19wM180NCksIF9fczBfNDQsIF9fcDFfNDQpOyBcCisgIF9fcmV0XzQ0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3A4KF9fcDBfNDUsIF9fcDFfNDUsIF9fcDJfNDUsIF9fcDNfNDUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczBfNDUgPSBfX3AwXzQ1OyBcCisgIHBvbHk4eDE2X3QgX19zMl80NSA9IF9fcDJfNDU7IFwKKyAgcG9seTh4MTZfdCBfX3JldjBfNDU7ICBfX3JldjBfNDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzQ1LCBfX3MwXzQ1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV2Ml80NTsgIF9fcmV2Ml80NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNDUsIF9fczJfNDUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXRfNDU7IFwKKyAgX19yZXRfNDUgPSBfX25vc3dhcF92c2V0cV9sYW5lX3A4KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDgoX19yZXYyXzQ1LCBfX3AzXzQ1KSwgX19yZXYwXzQ1LCBfX3AxXzQ1KTsgXAorICBfX3JldF80NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzQ1LCBfX3JldF80NSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNDU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9wMTYoX19wMF80NiwgX19wMV80NiwgX19wMl80NiwgX19wM180NikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMF80NiA9IF9fcDBfNDY7IFwKKyAgcG9seTE2eDhfdCBfX3MyXzQ2ID0gX19wMl80NjsgXAorICBwb2x5MTZ4OF90IF9fcmV0XzQ2OyBcCisgIF9fcmV0XzQ2ID0gdnNldHFfbGFuZV9wMTYodmdldHFfbGFuZV9wMTYoX19zMl80NiwgX19wM180NiksIF9fczBfNDYsIF9fcDFfNDYpOyBcCisgIF9fcmV0XzQ2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3AxNihfX3AwXzQ3LCBfX3AxXzQ3LCBfX3AyXzQ3LCBfX3AzXzQ3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwXzQ3ID0gX19wMF80NzsgXAorICBwb2x5MTZ4OF90IF9fczJfNDcgPSBfX3AyXzQ3OyBcCisgIHBvbHkxNng4X3QgX19yZXYwXzQ3OyAgX19yZXYwXzQ3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF80NywgX19zMF80NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldjJfNDc7ICBfX3JldjJfNDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzQ3LCBfX3MyXzQ3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4OF90IF9fcmV0XzQ3OyBcCisgIF9fcmV0XzQ3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9wMTYoX19ub3N3YXBfdmdldHFfbGFuZV9wMTYoX19yZXYyXzQ3LCBfX3AzXzQ3KSwgX19yZXYwXzQ3LCBfX3AxXzQ3KTsgXAorICBfX3JldF80NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzQ3LCBfX3JldF80NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNDc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91OChfX3AwXzQ4LCBfX3AxXzQ4LCBfX3AyXzQ4LCBfX3AzXzQ4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwXzQ4ID0gX19wMF80ODsgXAorICB1aW50OHgxNl90IF9fczJfNDggPSBfX3AyXzQ4OyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfNDg7IFwKKyAgX19yZXRfNDggPSB2c2V0cV9sYW5lX3U4KHZnZXRxX2xhbmVfdTgoX19zMl80OCwgX19wM180OCksIF9fczBfNDgsIF9fcDFfNDgpOyBcCisgIF9fcmV0XzQ4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3U4KF9fcDBfNDksIF9fcDFfNDksIF9fcDJfNDksIF9fcDNfNDkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczBfNDkgPSBfX3AwXzQ5OyBcCisgIHVpbnQ4eDE2X3QgX19zMl80OSA9IF9fcDJfNDk7IFwKKyAgdWludDh4MTZfdCBfX3JldjBfNDk7ICBfX3JldjBfNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzQ5LCBfX3MwXzQ5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV2Ml80OTsgIF9fcmV2Ml80OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNDksIF9fczJfNDksIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfNDk7IFwKKyAgX19yZXRfNDkgPSBfX25vc3dhcF92c2V0cV9sYW5lX3U4KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTgoX19yZXYyXzQ5LCBfX3AzXzQ5KSwgX19yZXYwXzQ5LCBfX3AxXzQ5KTsgXAorICBfX3JldF80OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzQ5LCBfX3JldF80OSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNDk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91MzIoX19wMF81MCwgX19wMV81MCwgX19wMl81MCwgX19wM181MCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF81MCA9IF9fcDBfNTA7IFwKKyAgdWludDMyeDRfdCBfX3MyXzUwID0gX19wMl81MDsgXAorICB1aW50MzJ4NF90IF9fcmV0XzUwOyBcCisgIF9fcmV0XzUwID0gdnNldHFfbGFuZV91MzIodmdldHFfbGFuZV91MzIoX19zMl81MCwgX19wM181MCksIF9fczBfNTAsIF9fcDFfNTApOyBcCisgIF9fcmV0XzUwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3UzMihfX3AwXzUxLCBfX3AxXzUxLCBfX3AyXzUxLCBfX3AzXzUxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwXzUxID0gX19wMF81MTsgXAorICB1aW50MzJ4NF90IF9fczJfNTEgPSBfX3AyXzUxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwXzUxOyAgX19yZXYwXzUxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF81MSwgX19zMF81MSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjJfNTE7ICBfX3JldjJfNTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzUxLCBfX3MyXzUxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0XzUxOyBcCisgIF9fcmV0XzUxID0gX19ub3N3YXBfdnNldHFfbGFuZV91MzIoX19ub3N3YXBfdmdldHFfbGFuZV91MzIoX19yZXYyXzUxLCBfX3AzXzUxKSwgX19yZXYwXzUxLCBfX3AxXzUxKTsgXAorICBfX3JldF81MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzUxLCBfX3JldF81MSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNTE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91NjQoX19wMF81MiwgX19wMV81MiwgX19wMl81MiwgX19wM181MikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMF81MiA9IF9fcDBfNTI7IFwKKyAgdWludDY0eDJfdCBfX3MyXzUyID0gX19wMl81MjsgXAorICB1aW50NjR4Ml90IF9fcmV0XzUyOyBcCisgIF9fcmV0XzUyID0gdnNldHFfbGFuZV91NjQodmdldHFfbGFuZV91NjQoX19zMl81MiwgX19wM181MiksIF9fczBfNTIsIF9fcDFfNTIpOyBcCisgIF9fcmV0XzUyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3U2NChfX3AwXzUzLCBfX3AxXzUzLCBfX3AyXzUzLCBfX3AzXzUzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwXzUzID0gX19wMF81MzsgXAorICB1aW50NjR4Ml90IF9fczJfNTMgPSBfX3AyXzUzOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwXzUzOyAgX19yZXYwXzUzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF81MywgX19zMF81MywgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjJfNTM7ICBfX3JldjJfNTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzUzLCBfX3MyXzUzLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0XzUzOyBcCisgIF9fcmV0XzUzID0gX19ub3N3YXBfdnNldHFfbGFuZV91NjQoX19ub3N3YXBfdmdldHFfbGFuZV91NjQoX19yZXYyXzUzLCBfX3AzXzUzKSwgX19yZXYwXzUzLCBfX3AxXzUzKTsgXAorICBfX3JldF81MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzUzLCBfX3JldF81MywgMSwgMCk7IFwKKyAgX19yZXRfNTM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV91MTYoX19wMF81NCwgX19wMV81NCwgX19wMl81NCwgX19wM181NCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMF81NCA9IF9fcDBfNTQ7IFwKKyAgdWludDE2eDhfdCBfX3MyXzU0ID0gX19wMl81NDsgXAorICB1aW50MTZ4OF90IF9fcmV0XzU0OyBcCisgIF9fcmV0XzU0ID0gdnNldHFfbGFuZV91MTYodmdldHFfbGFuZV91MTYoX19zMl81NCwgX19wM181NCksIF9fczBfNTQsIF9fcDFfNTQpOyBcCisgIF9fcmV0XzU0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3UxNihfX3AwXzU1LCBfX3AxXzU1LCBfX3AyXzU1LCBfX3AzXzU1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwXzU1ID0gX19wMF81NTsgXAorICB1aW50MTZ4OF90IF9fczJfNTUgPSBfX3AyXzU1OyBcCisgIHVpbnQxNng4X3QgX19yZXYwXzU1OyAgX19yZXYwXzU1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF81NSwgX19zMF81NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjJfNTU7ICBfX3JldjJfNTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzU1LCBfX3MyXzU1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV0XzU1OyBcCisgIF9fcmV0XzU1ID0gX19ub3N3YXBfdnNldHFfbGFuZV91MTYoX19ub3N3YXBfdmdldHFfbGFuZV91MTYoX19yZXYyXzU1LCBfX3AzXzU1KSwgX19yZXYwXzU1LCBfX3AxXzU1KTsgXAorICBfX3JldF81NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzU1LCBfX3JldF81NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNTU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zOChfX3AwXzU2LCBfX3AxXzU2LCBfX3AyXzU2LCBfX3AzXzU2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczBfNTYgPSBfX3AwXzU2OyBcCisgIGludDh4MTZfdCBfX3MyXzU2ID0gX19wMl81NjsgXAorICBpbnQ4eDE2X3QgX19yZXRfNTY7IFwKKyAgX19yZXRfNTYgPSB2c2V0cV9sYW5lX3M4KHZnZXRxX2xhbmVfczgoX19zMl81NiwgX19wM181NiksIF9fczBfNTYsIF9fcDFfNTYpOyBcCisgIF9fcmV0XzU2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3M4KF9fcDBfNTcsIF9fcDFfNTcsIF9fcDJfNTcsIF9fcDNfNTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMF81NyA9IF9fcDBfNTc7IFwKKyAgaW50OHgxNl90IF9fczJfNTcgPSBfX3AyXzU3OyBcCisgIGludDh4MTZfdCBfX3JldjBfNTc7ICBfX3JldjBfNTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzU3LCBfX3MwXzU3LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXYyXzU3OyAgX19yZXYyXzU3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl81NywgX19zMl81NywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0XzU3OyBcCisgIF9fcmV0XzU3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zOChfX25vc3dhcF92Z2V0cV9sYW5lX3M4KF9fcmV2Ml81NywgX19wM181NyksIF9fcmV2MF81NywgX19wMV81Nyk7IFwKKyAgX19yZXRfNTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF81NywgX19yZXRfNTcsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzU3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfZjMyKF9fcDBfNTgsIF9fcDFfNTgsIF9fcDJfNTgsIF9fcDNfNTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzU4ID0gX19wMF81ODsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzU4ID0gX19wMl81ODsgXAorICBmbG9hdDMyeDRfdCBfX3JldF81ODsgXAorICBfX3JldF81OCA9IHZzZXRxX2xhbmVfZjMyKHZnZXRxX2xhbmVfZjMyKF9fczJfNTgsIF9fcDNfNTgpLCBfX3MwXzU4LCBfX3AxXzU4KTsgXAorICBfX3JldF81ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9mMzIoX19wMF81OSwgX19wMV81OSwgX19wMl81OSwgX19wM181OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfNTkgPSBfX3AwXzU5OyBcCisgIGZsb2F0MzJ4NF90IF9fczJfNTkgPSBfX3AyXzU5OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MF81OTsgIF9fcmV2MF81OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNTksIF9fczBfNTksIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2Ml81OTsgIF9fcmV2Ml81OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNTksIF9fczJfNTksIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0XzU5OyBcCisgIF9fcmV0XzU5ID0gX19ub3N3YXBfdnNldHFfbGFuZV9mMzIoX19ub3N3YXBfdmdldHFfbGFuZV9mMzIoX19yZXYyXzU5LCBfX3AzXzU5KSwgX19yZXYwXzU5LCBfX3AxXzU5KTsgXAorICBfX3JldF81OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzU5LCBfX3JldF81OSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNTk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zMzIoX19wMF82MCwgX19wMV82MCwgX19wMl82MCwgX19wM182MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwXzYwID0gX19wMF82MDsgXAorICBpbnQzMng0X3QgX19zMl82MCA9IF9fcDJfNjA7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzYwOyBcCisgIF9fcmV0XzYwID0gdnNldHFfbGFuZV9zMzIodmdldHFfbGFuZV9zMzIoX19zMl82MCwgX19wM182MCksIF9fczBfNjAsIF9fcDFfNjApOyBcCisgIF9fcmV0XzYwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3MzMihfX3AwXzYxLCBfX3AxXzYxLCBfX3AyXzYxLCBfX3AzXzYxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczBfNjEgPSBfX3AwXzYxOyBcCisgIGludDMyeDRfdCBfX3MyXzYxID0gX19wMl82MTsgXAorICBpbnQzMng0X3QgX19yZXYwXzYxOyAgX19yZXYwXzYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF82MSwgX19zMF82MSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2Ml82MTsgIF9fcmV2Ml82MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNjEsIF9fczJfNjEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF82MTsgXAorICBfX3JldF82MSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfczMyKF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcmV2Ml82MSwgX19wM182MSksIF9fcmV2MF82MSwgX19wMV82MSk7IFwKKyAgX19yZXRfNjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF82MSwgX19yZXRfNjEsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzYxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfczY0KF9fcDBfNjIsIF9fcDFfNjIsIF9fcDJfNjIsIF9fcDNfNjIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMF82MiA9IF9fcDBfNjI7IFwKKyAgaW50NjR4Ml90IF9fczJfNjIgPSBfX3AyXzYyOyBcCisgIGludDY0eDJfdCBfX3JldF82MjsgXAorICBfX3JldF82MiA9IHZzZXRxX2xhbmVfczY0KHZnZXRxX2xhbmVfczY0KF9fczJfNjIsIF9fcDNfNjIpLCBfX3MwXzYyLCBfX3AxXzYyKTsgXAorICBfX3JldF82MjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9zNjQoX19wMF82MywgX19wMV82MywgX19wMl82MywgX19wM182MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwXzYzID0gX19wMF82MzsgXAorICBpbnQ2NHgyX3QgX19zMl82MyA9IF9fcDJfNjM7IFwKKyAgaW50NjR4Ml90IF9fcmV2MF82MzsgIF9fcmV2MF82MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNjMsIF9fczBfNjMsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjJfNjM7ICBfX3JldjJfNjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzYzLCBfX3MyXzYzLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXRfNjM7IFwKKyAgX19yZXRfNjMgPSBfX25vc3dhcF92c2V0cV9sYW5lX3M2NChfX25vc3dhcF92Z2V0cV9sYW5lX3M2NChfX3JldjJfNjMsIF9fcDNfNjMpLCBfX3JldjBfNjMsIF9fcDFfNjMpOyBcCisgIF9fcmV0XzYzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNjMsIF9fcmV0XzYzLCAxLCAwKTsgXAorICBfX3JldF82MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVxX3MxNihfX3AwXzY0LCBfX3AxXzY0LCBfX3AyXzY0LCBfX3AzXzY0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczBfNjQgPSBfX3AwXzY0OyBcCisgIGludDE2eDhfdCBfX3MyXzY0ID0gX19wMl82NDsgXAorICBpbnQxNng4X3QgX19yZXRfNjQ7IFwKKyAgX19yZXRfNjQgPSB2c2V0cV9sYW5lX3MxNih2Z2V0cV9sYW5lX3MxNihfX3MyXzY0LCBfX3AzXzY0KSwgX19zMF82NCwgX19wMV82NCk7IFwKKyAgX19yZXRfNjQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weXFfbGFuZXFfczE2KF9fcDBfNjUsIF9fcDFfNjUsIF9fcDJfNjUsIF9fcDNfNjUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMF82NSA9IF9fcDBfNjU7IFwKKyAgaW50MTZ4OF90IF9fczJfNjUgPSBfX3AyXzY1OyBcCisgIGludDE2eDhfdCBfX3JldjBfNjU7ICBfX3JldjBfNjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzY1LCBfX3MwXzY1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyXzY1OyAgX19yZXYyXzY1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl82NSwgX19zMl82NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzY1OyBcCisgIF9fcmV0XzY1ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zMTYoX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19yZXYyXzY1LCBfX3AzXzY1KSwgX19yZXYwXzY1LCBfX3AxXzY1KTsgXAorICBfX3JldF82NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzY1LCBfX3JldF82NSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNjU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3A4KF9fcDBfNjYsIF9fcDFfNjYsIF9fcDJfNjYsIF9fcDNfNjYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMF82NiA9IF9fcDBfNjY7IFwKKyAgcG9seTh4MTZfdCBfX3MyXzY2ID0gX19wMl82NjsgXAorICBwb2x5OHg4X3QgX19yZXRfNjY7IFwKKyAgX19yZXRfNjYgPSB2c2V0X2xhbmVfcDgodmdldHFfbGFuZV9wOChfX3MyXzY2LCBfX3AzXzY2KSwgX19zMF82NiwgX19wMV82Nik7IFwKKyAgX19yZXRfNjY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9wOChfX3AwXzY3LCBfX3AxXzY3LCBfX3AyXzY3LCBfX3AzXzY3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OF90IF9fczBfNjcgPSBfX3AwXzY3OyBcCisgIHBvbHk4eDE2X3QgX19zMl82NyA9IF9fcDJfNjc7IFwKKyAgcG9seTh4OF90IF9fcmV2MF82NzsgIF9fcmV2MF82NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNjcsIF9fczBfNjcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2X3QgX19yZXYyXzY3OyAgX19yZXYyXzY3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl82NywgX19zMl82NywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTh4OF90IF9fcmV0XzY3OyBcCisgIF9fcmV0XzY3ID0gX19ub3N3YXBfdnNldF9sYW5lX3A4KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDgoX19yZXYyXzY3LCBfX3AzXzY3KSwgX19yZXYwXzY3LCBfX3AxXzY3KTsgXAorICBfX3JldF82NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzY3LCBfX3JldF82NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNjc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3AxNihfX3AwXzY4LCBfX3AxXzY4LCBfX3AyXzY4LCBfX3AzXzY4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwXzY4ID0gX19wMF82ODsgXAorICBwb2x5MTZ4OF90IF9fczJfNjggPSBfX3AyXzY4OyBcCisgIHBvbHkxNng0X3QgX19yZXRfNjg7IFwKKyAgX19yZXRfNjggPSB2c2V0X2xhbmVfcDE2KHZnZXRxX2xhbmVfcDE2KF9fczJfNjgsIF9fcDNfNjgpLCBfX3MwXzY4LCBfX3AxXzY4KTsgXAorICBfX3JldF82ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX3AxNihfX3AwXzY5LCBfX3AxXzY5LCBfX3AyXzY5LCBfX3AzXzY5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwXzY5ID0gX19wMF82OTsgXAorICBwb2x5MTZ4OF90IF9fczJfNjkgPSBfX3AyXzY5OyBcCisgIHBvbHkxNng0X3QgX19yZXYwXzY5OyAgX19yZXYwXzY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF82OSwgX19zMF82OSwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldjJfNjk7ICBfX3JldjJfNjkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzY5LCBfX3MyXzY5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0XzY5OyBcCisgIF9fcmV0XzY5ID0gX19ub3N3YXBfdnNldF9sYW5lX3AxNihfX25vc3dhcF92Z2V0cV9sYW5lX3AxNihfX3JldjJfNjksIF9fcDNfNjkpLCBfX3JldjBfNjksIF9fcDFfNjkpOyBcCisgIF9fcmV0XzY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNjksIF9fcmV0XzY5LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF82OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTgoX19wMF83MCwgX19wMV83MCwgX19wMl83MCwgX19wM183MCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzcwID0gX19wMF83MDsgXAorICB1aW50OHgxNl90IF9fczJfNzAgPSBfX3AyXzcwOyBcCisgIHVpbnQ4eDhfdCBfX3JldF83MDsgXAorICBfX3JldF83MCA9IHZzZXRfbGFuZV91OCh2Z2V0cV9sYW5lX3U4KF9fczJfNzAsIF9fcDNfNzApLCBfX3MwXzcwLCBfX3AxXzcwKTsgXAorICBfX3JldF83MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVxX3U4KF9fcDBfNzEsIF9fcDFfNzEsIF9fcDJfNzEsIF9fcDNfNzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF83MSA9IF9fcDBfNzE7IFwKKyAgdWludDh4MTZfdCBfX3MyXzcxID0gX19wMl83MTsgXAorICB1aW50OHg4X3QgX19yZXYwXzcxOyAgX19yZXYwXzcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF83MSwgX19zMF83MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldjJfNzE7ICBfX3JldjJfNzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzcxLCBfX3MyXzcxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHg4X3QgX19yZXRfNzE7IFwKKyAgX19yZXRfNzEgPSBfX25vc3dhcF92c2V0X2xhbmVfdTgoX19ub3N3YXBfdmdldHFfbGFuZV91OChfX3JldjJfNzEsIF9fcDNfNzEpLCBfX3JldjBfNzEsIF9fcDFfNzEpOyBcCisgIF9fcmV0XzcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfNzEsIF9fcmV0XzcxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF83MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTMyKF9fcDBfNzIsIF9fcDFfNzIsIF9fcDJfNzIsIF9fcDNfNzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfNzIgPSBfX3AwXzcyOyBcCisgIHVpbnQzMng0X3QgX19zMl83MiA9IF9fcDJfNzI7IFwKKyAgdWludDMyeDJfdCBfX3JldF83MjsgXAorICBfX3JldF83MiA9IHZzZXRfbGFuZV91MzIodmdldHFfbGFuZV91MzIoX19zMl83MiwgX19wM183MiksIF9fczBfNzIsIF9fcDFfNzIpOyBcCisgIF9fcmV0XzcyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfdTMyKF9fcDBfNzMsIF9fcDFfNzMsIF9fcDJfNzMsIF9fcDNfNzMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfNzMgPSBfX3AwXzczOyBcCisgIHVpbnQzMng0X3QgX19zMl83MyA9IF9fcDJfNzM7IFwKKyAgdWludDMyeDJfdCBfX3JldjBfNzM7ICBfX3JldjBfNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzczLCBfX3MwXzczLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2Ml83MzsgIF9fcmV2Ml83MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNzMsIF9fczJfNzMsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXRfNzM7IFwKKyAgX19yZXRfNzMgPSBfX25vc3dhcF92c2V0X2xhbmVfdTMyKF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTMyKF9fcmV2Ml83MywgX19wM183MyksIF9fcmV2MF83MywgX19wMV83Myk7IFwKKyAgX19yZXRfNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF83MywgX19yZXRfNzMsIDEsIDApOyBcCisgIF9fcmV0XzczOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV91NjQoX19wMF83NCwgX19wMV83NCwgX19wMl83NCwgX19wM183NCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMF83NCA9IF9fcDBfNzQ7IFwKKyAgdWludDY0eDJfdCBfX3MyXzc0ID0gX19wMl83NDsgXAorICB1aW50NjR4MV90IF9fcmV0Xzc0OyBcCisgIF9fcmV0Xzc0ID0gdnNldF9sYW5lX3U2NCh2Z2V0cV9sYW5lX3U2NChfX3MyXzc0LCBfX3AzXzc0KSwgX19zMF83NCwgX19wMV83NCk7IFwKKyAgX19yZXRfNzQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV91NjQoX19wMF83NSwgX19wMV83NSwgX19wMl83NSwgX19wM183NSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMF83NSA9IF9fcDBfNzU7IFwKKyAgdWludDY0eDJfdCBfX3MyXzc1ID0gX19wMl83NTsgXAorICB1aW50NjR4Ml90IF9fcmV2Ml83NTsgIF9fcmV2Ml83NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfNzUsIF9fczJfNzUsIDEsIDApOyBcCisgIHVpbnQ2NHgxX3QgX19yZXRfNzU7IFwKKyAgX19yZXRfNzUgPSBfX25vc3dhcF92c2V0X2xhbmVfdTY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfdTY0KF9fcmV2Ml83NSwgX19wM183NSksIF9fczBfNzUsIF9fcDFfNzUpOyBcCisgIF9fcmV0Xzc1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV91MTYoX19wMF83NiwgX19wMV83NiwgX19wMl83NiwgX19wM183NikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF83NiA9IF9fcDBfNzY7IFwKKyAgdWludDE2eDhfdCBfX3MyXzc2ID0gX19wMl83NjsgXAorICB1aW50MTZ4NF90IF9fcmV0Xzc2OyBcCisgIF9fcmV0Xzc2ID0gdnNldF9sYW5lX3UxNih2Z2V0cV9sYW5lX3UxNihfX3MyXzc2LCBfX3AzXzc2KSwgX19zMF83NiwgX19wMV83Nik7IFwKKyAgX19yZXRfNzY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV91MTYoX19wMF83NywgX19wMV83NywgX19wMl83NywgX19wM183NykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF83NyA9IF9fcDBfNzc7IFwKKyAgdWludDE2eDhfdCBfX3MyXzc3ID0gX19wMl83NzsgXAorICB1aW50MTZ4NF90IF9fcmV2MF83NzsgIF9fcmV2MF83NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNzcsIF9fczBfNzcsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyXzc3OyAgX19yZXYyXzc3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl83NywgX19zMl83NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldF83NzsgXAorICBfX3JldF83NyA9IF9fbm9zd2FwX3ZzZXRfbGFuZV91MTYoX19ub3N3YXBfdmdldHFfbGFuZV91MTYoX19yZXYyXzc3LCBfX3AzXzc3KSwgX19yZXYwXzc3LCBfX3AxXzc3KTsgXAorICBfX3JldF83NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0Xzc3LCBfX3JldF83NywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfNzc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVxX3M4KF9fcDBfNzgsIF9fcDFfNzgsIF9fcDJfNzgsIF9fcDNfNzgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzc4ID0gX19wMF83ODsgXAorICBpbnQ4eDE2X3QgX19zMl83OCA9IF9fcDJfNzg7IFwKKyAgaW50OHg4X3QgX19yZXRfNzg7IFwKKyAgX19yZXRfNzggPSB2c2V0X2xhbmVfczgodmdldHFfbGFuZV9zOChfX3MyXzc4LCBfX3AzXzc4KSwgX19zMF83OCwgX19wMV83OCk7IFwKKyAgX19yZXRfNzg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9zOChfX3AwXzc5LCBfX3AxXzc5LCBfX3AyXzc5LCBfX3AzXzc5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF83OSA9IF9fcDBfNzk7IFwKKyAgaW50OHgxNl90IF9fczJfNzkgPSBfX3AyXzc5OyBcCisgIGludDh4OF90IF9fcmV2MF83OTsgIF9fcmV2MF83OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfNzksIF9fczBfNzksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldjJfNzk7ICBfX3JldjJfNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzc5LCBfX3MyXzc5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDhfdCBfX3JldF83OTsgXAorICBfX3JldF83OSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9zOChfX25vc3dhcF92Z2V0cV9sYW5lX3M4KF9fcmV2Ml83OSwgX19wM183OSksIF9fcmV2MF83OSwgX19wMV83OSk7IFwKKyAgX19yZXRfNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF83OSwgX19yZXRfNzksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0Xzc5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9mMzIoX19wMF84MCwgX19wMV84MCwgX19wMl84MCwgX19wM184MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfODAgPSBfX3AwXzgwOyBcCisgIGZsb2F0MzJ4NF90IF9fczJfODAgPSBfX3AyXzgwOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzgwOyBcCisgIF9fcmV0XzgwID0gdnNldF9sYW5lX2YzMih2Z2V0cV9sYW5lX2YzMihfX3MyXzgwLCBfX3AzXzgwKSwgX19zMF84MCwgX19wMV84MCk7IFwKKyAgX19yZXRfODA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9mMzIoX19wMF84MSwgX19wMV84MSwgX19wMl84MSwgX19wM184MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfODEgPSBfX3AwXzgxOyBcCisgIGZsb2F0MzJ4NF90IF9fczJfODEgPSBfX3AyXzgxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MF84MTsgIF9fcmV2MF84MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfODEsIF9fczBfODEsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2Ml84MTsgIF9fcmV2Ml84MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfODEsIF9fczJfODEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzgxOyBcCisgIF9fcmV0XzgxID0gX19ub3N3YXBfdnNldF9sYW5lX2YzMihfX25vc3dhcF92Z2V0cV9sYW5lX2YzMihfX3JldjJfODEsIF9fcDNfODEpLCBfX3JldjBfODEsIF9fcDFfODEpOyBcCisgIF9fcmV0XzgxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfODEsIF9fcmV0XzgxLCAxLCAwKTsgXAorICBfX3JldF84MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfczMyKF9fcDBfODIsIF9fcDFfODIsIF9fcDJfODIsIF9fcDNfODIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF84MiA9IF9fcDBfODI7IFwKKyAgaW50MzJ4NF90IF9fczJfODIgPSBfX3AyXzgyOyBcCisgIGludDMyeDJfdCBfX3JldF84MjsgXAorICBfX3JldF84MiA9IHZzZXRfbGFuZV9zMzIodmdldHFfbGFuZV9zMzIoX19zMl84MiwgX19wM184MiksIF9fczBfODIsIF9fcDFfODIpOyBcCisgIF9fcmV0XzgyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfczMyKF9fcDBfODMsIF9fcDFfODMsIF9fcDJfODMsIF9fcDNfODMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF84MyA9IF9fcDBfODM7IFwKKyAgaW50MzJ4NF90IF9fczJfODMgPSBfX3AyXzgzOyBcCisgIGludDMyeDJfdCBfX3JldjBfODM7ICBfX3JldjBfODMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzgzLCBfX3MwXzgzLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyXzgzOyAgX19yZXYyXzgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl84MywgX19zMl84MywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0XzgzOyBcCisgIF9fcmV0XzgzID0gX19ub3N3YXBfdnNldF9sYW5lX3MzMihfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjJfODMsIF9fcDNfODMpLCBfX3JldjBfODMsIF9fcDFfODMpOyBcCisgIF9fcmV0XzgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfODMsIF9fcmV0XzgzLCAxLCAwKTsgXAorICBfX3JldF84MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfczY0KF9fcDBfODQsIF9fcDFfODQsIF9fcDJfODQsIF9fcDNfODQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMF84NCA9IF9fcDBfODQ7IFwKKyAgaW50NjR4Ml90IF9fczJfODQgPSBfX3AyXzg0OyBcCisgIGludDY0eDFfdCBfX3JldF84NDsgXAorICBfX3JldF84NCA9IHZzZXRfbGFuZV9zNjQodmdldHFfbGFuZV9zNjQoX19zMl84NCwgX19wM184NCksIF9fczBfODQsIF9fcDFfODQpOyBcCisgIF9fcmV0Xzg0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfczY0KF9fcDBfODUsIF9fcDFfODUsIF9fcDJfODUsIF9fcDNfODUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMF84NSA9IF9fcDBfODU7IFwKKyAgaW50NjR4Ml90IF9fczJfODUgPSBfX3AyXzg1OyBcCisgIGludDY0eDJfdCBfX3JldjJfODU7ICBfX3JldjJfODUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzg1LCBfX3MyXzg1LCAxLCAwKTsgXAorICBpbnQ2NHgxX3QgX19yZXRfODU7IFwKKyAgX19yZXRfODUgPSBfX25vc3dhcF92c2V0X2xhbmVfczY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfczY0KF9fcmV2Ml84NSwgX19wM184NSksIF9fczBfODUsIF9fcDFfODUpOyBcCisgIF9fcmV0Xzg1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9zMTYoX19wMF84NiwgX19wMV84NiwgX19wMl84NiwgX19wM184NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzg2ID0gX19wMF84NjsgXAorICBpbnQxNng4X3QgX19zMl84NiA9IF9fcDJfODY7IFwKKyAgaW50MTZ4NF90IF9fcmV0Xzg2OyBcCisgIF9fcmV0Xzg2ID0gdnNldF9sYW5lX3MxNih2Z2V0cV9sYW5lX3MxNihfX3MyXzg2LCBfX3AzXzg2KSwgX19zMF84NiwgX19wMV84Nik7IFwKKyAgX19yZXRfODY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9zMTYoX19wMF84NywgX19wMV84NywgX19wMl84NywgX19wM184NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzg3ID0gX19wMF84NzsgXAorICBpbnQxNng4X3QgX19zMl84NyA9IF9fcDJfODc7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF84NzsgIF9fcmV2MF84NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfODcsIF9fczBfODcsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjJfODc7ICBfX3JldjJfODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzg3LCBfX3MyXzg3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXRfODc7IFwKKyAgX19yZXRfODcgPSBfX25vc3dhcF92c2V0X2xhbmVfczE2KF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2Ml84NywgX19wM184NyksIF9fcmV2MF84NywgX19wMV84Nyk7IFwKKyAgX19yZXRfODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF84NywgX19yZXRfODcsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0Xzg3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZjcmVhdGVfcDY0KHVpbnQ2NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgxX3QgdmNyZWF0ZV9wNjQodWludDY0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2Y3JlYXRlX2Y2NCh1aW50NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZjcmVhdGVfZjY0KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KShfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdmN2dHNfZjMyX3MzMihpbnQzMl90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX2YzMl9zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2Y3Z0c19mMzJfczMyKGludDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfZjMyX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdmN2dHNfZjMyX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19mMzJfdTMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdmN2dHNfZjMyX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19mMzJfdTMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mMzJfZjY0KChpbnQ4eDE2X3QpX19wMCwgOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnRfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2Y2NCgoaW50OHgxNl90KV9fcmV2MCwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDJfdCBfX25vc3dhcF92Y3Z0X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjMyX2Y2NCgoaW50OHgxNl90KV9fcDAsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2Y3Z0ZF9mNjRfczY0KGludDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfZjY0X3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZjdnRkX2Y2NF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9mNjRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2Y3Z0ZF9mNjRfdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX2Y2NF91NjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2Y3Z0ZF9mNjRfdTY0KHVpbnQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX2Y2NF91NjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmN2dHFfZjY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mNjRfdigoaW50OHgxNl90KV9fcDAsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmN2dHFfZjY0X3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mNjRfdigoaW50OHgxNl90KV9fcmV2MCwgNTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmN2dHFfZjY0X3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX2Y2NF92KChpbnQ4eDE2X3QpX19wMCwgMzUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2Y3Z0cV9mNjRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9mNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdmN2dF9mNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmN2dF9mNjRfdTY0KHVpbnQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfZjY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2Y3Z0X2Y2NF9zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2Y2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdmN2dF9mNjRfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdmN2dF9mNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X2Y2NF9mMzIoKGludDh4OF90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmN2dF9mNjRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfZjMyKChpbnQ4eDhfdClfX3JldjAsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0NjR4Ml90IF9fbm9zd2FwX3ZjdnRfZjY0X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dF9mNjRfZjMyKChpbnQ4eDhfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQxNng4X3QgdmN2dF9oaWdoX2YxNl9mMzIoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9mMTYoX19wMCwgdmN2dF9mMTZfZjMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQxNng4X3QgdmN2dF9oaWdoX2YxNl9mMzIoZmxvYXQxNng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX2YxNihfX3JldjAsIF9fbm9zd2FwX3ZjdnRfZjE2X2YzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRfaGlnaF9mMzJfZjE2KGZsb2F0MTZ4OF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmN2dF9mMzJfZjE2KHZnZXRfaGlnaF9mMTYoX19wMCkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y3Z0X2hpZ2hfZjMyX2YxNihmbG9hdDE2eDhfdCBfX3AwKSB7CisgIGZsb2F0MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y3Z0X2YzMl9mMTYoX19ub3N3YXBfdmdldF9oaWdoX2YxNihfX3JldjApKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRfaGlnaF9mMzJfZjY0KGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfZjMyKF9fcDAsIHZjdnRfZjMyX2Y2NChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZjdnRfaGlnaF9mMzJfZjY0KGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9mMzIoX19yZXYwLCBfX25vc3dhcF92Y3Z0X2YzMl9mNjQoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2Y3Z0X2hpZ2hfZjY0X2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZjdnRfZjY0X2YzMih2Z2V0X2hpZ2hfZjMyKF9fcDApKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmN2dF9oaWdoX2Y2NF9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmN2dF9mNjRfZjMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9mMzIoX19yZXYwKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0c19uX2YzMl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fZjMyX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRzX25fZjMyX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfbl9mMzJfdTMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0c19uX2YzMl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfbl9mMzJfczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHNfbl9mMzJfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fZjMyX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl9mNjRfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2Y2NF92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl9mNjRfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fZjY0X3YoKGludDh4MTZfdClfX3JldjAsIF9fcDEsIDUxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRxX25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2Y2NF92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl9mNjRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX2Y2NF92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0X25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2Y2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX2Y2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjdnRfbl9mNjRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfbl9mNjRfdigoaW50OHg4X3QpX19zMCwgX19wMSwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fZjY0X3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fZjY0X3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0ZF9uX2Y2NF91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fZjY0X3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRkX25fZjY0X3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfbl9mNjRfdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0ZF9uX2Y2NF9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfbl9mNjRfczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dGRfbl9mNjRfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fZjY0X3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHNfbl9zMzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19uX3MzMl9mMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0c19uX3MzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fczMyX2YzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl9zNjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX3M2NF92KChpbnQ4eDE2X3QpX19zMCwgX19wMSwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHFfbl9zNjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9uX3M2NF92KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxLCAzNSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0X25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3M2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRfbl9zNjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fczY0X3YoKGludDh4OF90KV9fczAsIF9fcDEsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0ZF9uX3M2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fczY0X2Y2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRkX25fczY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfbl9zNjRfZjY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y3Z0c19uX3UzMl9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfbl91MzJfZjMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmN2dHNfbl91MzJfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX25fdTMyX2YzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dHFfbl91NjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX25fdTY0X3YoKGludDh4MTZfdClfX3MwLCBfX3AxLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0cV9uX3U2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfbl91NjRfdigoaW50OHgxNl90KV9fcmV2MCwgX19wMSwgNTEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dF9uX3U2NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF9uX3U2NF92KChpbnQ4eDhfdClfX3MwLCBfX3AxLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y3Z0X25fdTY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X25fdTY0X3YoKGludDh4OF90KV9fczAsIF9fcDEsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmN2dGRfbl91NjRfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX25fdTY0X2Y2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjdnRkX25fdTY0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF9uX3U2NF9mNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmN2dHNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0c19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZjdnRzX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjdnRkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGRfczY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y3Z0ZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZjdnRxX3M2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfczY0X3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2Y3Z0cV9zNjRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cV9zNjRfdigoaW50OHgxNl90KV9fcmV2MCwgMzUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4MV90IHZjdnRfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZjdnRfczY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0X3M2NF92KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y3Z0c191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dHNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmN2dHNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRzX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmN2dGRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRkX3U2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjdnRkX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0ZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmN2dHFfdTY0X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRxX3U2NF92KChpbnQ4eDE2X3QpX19wMCwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZjdnRxX3U2NF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdmN2dHFfdTY0X3YoKGludDh4MTZfdClfX3JldjAsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdmN2dF91NjRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdmN2dF91NjRfdigoaW50OHg4X3QpX19wMCwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZjdnRfdTY0X2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRfdTY0X3YoKGludDh4OF90KV9fcDAsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZjdnRhc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZjdnRhc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmN2dGFkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGFkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmN2dGFkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dGFkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmN2dGFzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmN2dGFzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0YXNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y3Z0YWRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y3Z0YWRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRhZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdmN2dG1zX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG1zX3MzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdmN2dG1zX3MzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG1zX3MzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2Y3Z0bWRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bWRfczY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2Y3Z0bWRfczY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bWRfczY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2Y3Z0bXNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtc191MzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2Y3Z0bXNfdTMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRtc191MzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZjdnRtZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG1kX3U2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZjdnRtZF91NjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dG1kX3U2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2Y3Z0bnNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2Y3Z0bnNfczMyX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bnNfczMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZjdnRuZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZjdnRuZF9zNjRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRuZF9zNjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZjdnRuc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG5zX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZjdnRuc191MzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdmN2dG5zX3UzMl9mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdmN2dG5kX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bmRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdmN2dG5kX3U2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0bmRfdTY0X2Y2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZjdnRwc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZjdnRwc19zMzJfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwc19zMzJfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdmN2dHBkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dHBkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdmN2dHBkX3M2NF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmN2dHBkX3M2NF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdmN2dHBzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdmN2dHBzX3UzMl9mMzIoZmxvYXQzMl90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0cHNfdTMyX2YzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2Y3Z0cGRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2Y3Z0cGRfdTY0X2Y2NChmbG9hdDY0X3QgX19wMCkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZjdnRwZF91NjRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2Y3Z0eGRfZjMyX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHhkX2YzMl9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2Y3Z0eGRfZjMyX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmN2dHhkX2YzMl9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmN2dHhfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHhfZjMyX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZjdnR4X2YzMl9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Y3Z0eF9mMzJfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmN2dHhfZjMyX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmN2dHhfZjMyX3YoKGludDh4MTZfdClfX3AwLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmN2dHhfaGlnaF9mMzJfZjY0KGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfZjMyKF9fcDAsIHZjdnR4X2YzMl9mNjQoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Y3Z0eF9oaWdoX2YzMl9mNjQoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX2YzMihfX3JldjAsIF9fbm9zd2FwX3ZjdnR4X2YzMl9mNjQoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2ZGl2cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC8gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmRpdnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2ZGl2cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC8gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmRpdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2ZGl2X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2ZGl2X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLyBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZkaXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAvIF9fcDE7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZkaXZfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLyBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwYl9sYW5lX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBiX2xhbmVfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwaF9sYW5lX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDRfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGhfbGFuZV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBiX2xhbmVfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVfaTgoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGJfbGFuZV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVfaTgoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBzX2xhbmVfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2kzMigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwc19sYW5lX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2kzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGRfbGFuZV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVfaTY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBkX2xhbmVfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBoX2xhbmVfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwaF9sYW5lX2kxNigoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwaF9sYW5lX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwaF9sYW5lX2kxNigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGJfbGFuZV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZV9pOCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwYl9sYW5lX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lX2k4KChpbnQ4eDhfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwZF9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZV9mNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGRfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVfZjY0KChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHNfbGFuZV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVfZjMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBzX2xhbmVfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lX2YzMigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHNfbGFuZV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVfaTMyKChpbnQ4eDhfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBzX2xhbmVfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZV9pMzIoKGludDh4OF90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBkX2xhbmVfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwZF9sYW5lX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdmR1cGRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwaF9sYW5lX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZV9pMTYoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGhfbGFuZV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwaF9sYW5lX2kxNigoaW50OHg4X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVfZjE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBiX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seThfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBiX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seThfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lcV9pOCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBoX2xhbmVxX3AxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDhfdCBfX3MwID0gX19wMDsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwaF9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGJfbGFuZXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lcV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGJfbGFuZXFfdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBiX2xhbmVxX2k4KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHNfbGFuZXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9pMzIoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBzX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9pMzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwZF9sYW5lcV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVxX2k2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGRfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVxX2k2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBoX2xhbmVxX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwaF9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGJfbGFuZXFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwYl9sYW5lcV9pOCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGJfbGFuZXFfczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdmR1cGJfbGFuZXFfaTgoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwZF9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVxX2Y2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cGRfbGFuZXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9mNjQoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwc19sYW5lcV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVxX2YzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHNfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwc19sYW5lcV9mMzIoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwc19sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBzX2xhbmVxX2kzMigoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHNfbGFuZXFfczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdmR1cHNfbGFuZXFfaTMyKChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cGRfbGFuZXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92ZHVwZF9sYW5lcV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBkX2xhbmVxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZkdXBkX2xhbmVxX2k2NCgoaW50OHgxNl90KV9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBoX2xhbmVxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdmR1cGhfbGFuZXFfaTE2KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwaF9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92ZHVwaF9sYW5lcV9pMTYoKGludDh4MTZfdClfX3JldjAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3A4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9wOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZfdCBfX3MwID0gX19wMDsgXAorICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9wMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfcDE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHkxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgcG9seTE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfdTE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwcV9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBxX2xhbmVxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwcV9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBxX2xhbmVxX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV91OChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwID0gX19wMDsgXAorICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZkdXBfbGFuZXFfZjMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9mMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9mMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZHVwX2xhbmVxX2YxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MCwgX19wMSwgX19wMSwgX19wMSwgX19wMSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2ZHVwX2xhbmVxX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmR1cF9sYW5lcV9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIF9fcDEsIF9fcDEpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmR1cF9sYW5lcV9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZkdXBfbGFuZXFfczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYwLCBfX3AxLCBfX3AxLCBfX3AxLCBfX3AxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgxX3QgdmR1cF9uX3A2NChwb2x5NjRfdCBfX3AwKSB7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIHtfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2ZHVwX25fcDY0KHBvbHk2NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdmR1cHFfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KSB7X19wMCwgX19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdmR1cHFfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2ZHVwcV9uX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdmR1cHFfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSB7X19wMCwgX19wMH07CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2ZHVwX25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2ZHVwX25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZleHRfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2ZXh0cV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92ZXh0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmV4dHFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dHFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmV4dHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZleHRfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmV4dF92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmV4dF9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92ZXh0X3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZmbWFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZmbWFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDY0eDJfdCBfX25vc3dhcF92Zm1hcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZmbWFfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2Zm1hX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hZF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hZF9sYW5lX2Y2NChfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hZF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hZF9sYW5lX2Y2NChfX3MwLCBfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFkX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFkX2xhbmVfZjY0KF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYXNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmZtYXNfbGFuZV9mMzIoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYXNfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmZtYXNfbGFuZV9mMzIoX19zMCwgX19zMSwgKGludDh4OF90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFzX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVfZjMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA0Mik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Zm1hcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYXFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzLCA0MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hcV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMsIDQxKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZmbWFxX2xhbmVfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMywgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHg4X3QpX19zMiwgX19wMywgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMsIDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYV9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFfbGFuZV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hZF9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmZtYWRfbGFuZXFfZjY0KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hZF9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmZtYWRfbGFuZXFfZjY0KF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYWRfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFkX2xhbmVxX2Y2NChfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hc19sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmZtYXNfbGFuZXFfZjMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1hc19sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdmZtYXNfbGFuZXFfZjMyKF9fczAsIF9fczEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYXNfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMl90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFzX2xhbmVxX2YzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1hcV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lcV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMywgNDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYXFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZXFfdigoaW50OHgxNl90KV9fczAsIChpbnQ4eDE2X3QpX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbWFxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbWFxX2xhbmVxX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIChpbnQ4eDE2X3QpX19zMiwgX19wMywgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYXFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtYXFfbGFuZXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCBfX3AzLCA0MSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2RlZmluZSBfX25vc3dhcF92Zm1hcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92Zm1hcV9sYW5lcV92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbWFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtYV9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMsIDkpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmZtYV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92Zm1hX2xhbmVxX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2Zm1hcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1hcV9mNjQoX19wMCwgX19wMSwgKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2Zm1hcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZmbWFxX2Y2NChfX3JldjAsIF9fcmV2MSwgKGZsb2F0NjR4Ml90KSB7X19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdmZtYXFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYXFfZjMyKF9fcDAsIF9fcDEsIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdmZtYXFfbl9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1hcV9mMzIoX19yZXYwLCBfX3JldjEsIChmbG9hdDMyeDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZmbWFfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmZtYV9mMzIoX19wMCwgX19wMSwgKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Zm1hX25fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEsIGZsb2F0MzJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtYV9mMzIoX19yZXYwLCBfX3JldjEsIChmbG9hdDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZmbXNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtc3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZmbXNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0eDJfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmZtc3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDY0eDJfdCBfX25vc3dhcF92Zm1zcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZmbXNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtc3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZmbXNxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyeDRfdCBfX3AyKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdmZtc3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDRfdCBfX25vc3dhcF92Zm1zcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSwgZmxvYXQzMng0X3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZmbXNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEsIGZsb2F0NjR4MV90IF9fcDIpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92Zm1zX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2Zm1zX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmZtc192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2Zm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtc192KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgKGludDh4OF90KV9fcDIsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2Zm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyeDJfdCBfX3AyKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdmZtc192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgZmxvYXQzMngyX3QgX19ub3N3YXBfdmZtc19mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMngyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZmbXNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zZF9sYW5lX2Y2NChfX3AwXzg4LCBfX3AxXzg4LCBfX3AyXzg4LCBfX3AzXzg4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfODggPSBfX3AwXzg4OyBcCisgIGZsb2F0NjRfdCBfX3MxXzg4ID0gX19wMV84ODsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzg4ID0gX19wMl84ODsgXAorICBmbG9hdDY0X3QgX19yZXRfODg7IFwKKyAgX19yZXRfODggPSB2Zm1hZF9sYW5lX2Y2NChfX3MwXzg4LCBfX3MxXzg4LCAtX19zMl84OCwgX19wM184OCk7IFwKKyAgX19yZXRfODg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zZF9sYW5lX2Y2NChfX3AwXzg5LCBfX3AxXzg5LCBfX3AyXzg5LCBfX3AzXzg5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfODkgPSBfX3AwXzg5OyBcCisgIGZsb2F0NjRfdCBfX3MxXzg5ID0gX19wMV84OTsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzg5ID0gX19wMl84OTsgXAorICBmbG9hdDY0X3QgX19yZXRfODk7IFwKKyAgX19yZXRfODkgPSBfX25vc3dhcF92Zm1hZF9sYW5lX2Y2NChfX3MwXzg5LCBfX3MxXzg5LCAtX19zMl84OSwgX19wM184OSk7IFwKKyAgX19yZXRfODk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNzX2xhbmVfZjMyKF9fcDBfOTAsIF9fcDFfOTAsIF9fcDJfOTAsIF9fcDNfOTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF85MCA9IF9fcDBfOTA7IFwKKyAgZmxvYXQzMl90IF9fczFfOTAgPSBfX3AxXzkwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfOTAgPSBfX3AyXzkwOyBcCisgIGZsb2F0MzJfdCBfX3JldF85MDsgXAorICBfX3JldF85MCA9IHZmbWFzX2xhbmVfZjMyKF9fczBfOTAsIF9fczFfOTAsIC1fX3MyXzkwLCBfX3AzXzkwKTsgXAorICBfX3JldF85MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNzX2xhbmVfZjMyKF9fcDBfOTEsIF9fcDFfOTEsIF9fcDJfOTEsIF9fcDNfOTEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF85MSA9IF9fcDBfOTE7IFwKKyAgZmxvYXQzMl90IF9fczFfOTEgPSBfX3AxXzkxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfOTEgPSBfX3AyXzkxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2Ml85MTsgIF9fcmV2Ml85MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfOTEsIF9fczJfOTEsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldF85MTsgXAorICBfX3JldF85MSA9IF9fbm9zd2FwX3ZmbWFzX2xhbmVfZjMyKF9fczBfOTEsIF9fczFfOTEsIC1fX3JldjJfOTEsIF9fcDNfOTEpOyBcCisgIF9fcmV0XzkxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zcV9sYW5lX2Y2NChfX3AwXzkyLCBfX3AxXzkyLCBfX3AyXzkyLCBfX3AzXzkyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMF85MiA9IF9fcDBfOTI7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV85MiA9IF9fcDFfOTI7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl85MiA9IF9fcDJfOTI7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXRfOTI7IFwKKyAgX19yZXRfOTIgPSB2Zm1hcV9sYW5lX2Y2NChfX3MwXzkyLCBfX3MxXzkyLCAtX19zMl85MiwgX19wM185Mik7IFwKKyAgX19yZXRfOTI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zcV9sYW5lX2Y2NChfX3AwXzkzLCBfX3AxXzkzLCBfX3AyXzkzLCBfX3AzXzkzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMF85MyA9IF9fcDBfOTM7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV85MyA9IF9fcDFfOTM7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl85MyA9IF9fcDJfOTM7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwXzkzOyAgX19yZXYwXzkzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF85MywgX19zMF85MywgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxXzkzOyAgX19yZXYxXzkzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV85MywgX19zMV85MywgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXRfOTM7IFwKKyAgX19yZXRfOTMgPSBfX25vc3dhcF92Zm1hcV9sYW5lX2Y2NChfX3JldjBfOTMsIF9fcmV2MV85MywgLV9fczJfOTMsIF9fcDNfOTMpOyBcCisgIF9fcmV0XzkzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfOTMsIF9fcmV0XzkzLCAxLCAwKTsgXAorICBfX3JldF85MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc3FfbGFuZV9mMzIoX19wMF85NCwgX19wMV85NCwgX19wMl85NCwgX19wM185NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfOTQgPSBfX3AwXzk0OyBcCisgIGZsb2F0MzJ4NF90IF9fczFfOTQgPSBfX3AxXzk0OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfOTQgPSBfX3AyXzk0OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0Xzk0OyBcCisgIF9fcmV0Xzk0ID0gdmZtYXFfbGFuZV9mMzIoX19zMF85NCwgX19zMV85NCwgLV9fczJfOTQsIF9fcDNfOTQpOyBcCisgIF9fcmV0Xzk0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc3FfbGFuZV9mMzIoX19wMF85NSwgX19wMV85NSwgX19wMl85NSwgX19wM185NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfOTUgPSBfX3AwXzk1OyBcCisgIGZsb2F0MzJ4NF90IF9fczFfOTUgPSBfX3AxXzk1OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfOTUgPSBfX3AyXzk1OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MF85NTsgIF9fcmV2MF85NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfOTUsIF9fczBfOTUsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MV85NTsgIF9fcmV2MV85NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfOTUsIF9fczFfOTUsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2Ml85NTsgIF9fcmV2Ml85NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfOTUsIF9fczJfOTUsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0Xzk1OyBcCisgIF9fcmV0Xzk1ID0gX19ub3N3YXBfdmZtYXFfbGFuZV9mMzIoX19yZXYwXzk1LCBfX3JldjFfOTUsIC1fX3JldjJfOTUsIF9fcDNfOTUpOyBcCisgIF9fcmV0Xzk1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfOTUsIF9fcmV0Xzk1LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF85NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc19sYW5lX2Y2NChfX3AwXzk2LCBfX3AxXzk2LCBfX3AyXzk2LCBfX3AzXzk2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF85NiA9IF9fcDBfOTY7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV85NiA9IF9fcDFfOTY7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl85NiA9IF9fcDJfOTY7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfOTY7IFwKKyAgX19yZXRfOTYgPSB2Zm1hX2xhbmVfZjY0KF9fczBfOTYsIF9fczFfOTYsIC1fX3MyXzk2LCBfX3AzXzk2KTsgXAorICBfX3JldF85NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNfbGFuZV9mNjQoX19wMF85NywgX19wMV85NywgX19wMl85NywgX19wM185NykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfOTcgPSBfX3AwXzk3OyBcCisgIGZsb2F0NjR4MV90IF9fczFfOTcgPSBfX3AxXzk3OyBcCisgIGZsb2F0NjR4MV90IF9fczJfOTcgPSBfX3AyXzk3OyBcCisgIGZsb2F0NjR4MV90IF9fcmV0Xzk3OyBcCisgIF9fcmV0Xzk3ID0gX19ub3N3YXBfdmZtYV9sYW5lX2Y2NChfX3MwXzk3LCBfX3MxXzk3LCAtX19zMl85NywgX19wM185Nyk7IFwKKyAgX19yZXRfOTc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNfbGFuZV9mMzIoX19wMF85OCwgX19wMV85OCwgX19wMl85OCwgX19wM185OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfOTggPSBfX3AwXzk4OyBcCisgIGZsb2F0MzJ4Ml90IF9fczFfOTggPSBfX3AxXzk4OyBcCisgIGZsb2F0MzJ4Ml90IF9fczJfOTggPSBfX3AyXzk4OyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0Xzk4OyBcCisgIF9fcmV0Xzk4ID0gdmZtYV9sYW5lX2YzMihfX3MwXzk4LCBfX3MxXzk4LCAtX19zMl85OCwgX19wM185OCk7IFwKKyAgX19yZXRfOTg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zX2xhbmVfZjMyKF9fcDBfOTksIF9fcDFfOTksIF9fcDJfOTksIF9fcDNfOTkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwXzk5ID0gX19wMF85OTsgXAorICBmbG9hdDMyeDJfdCBfX3MxXzk5ID0gX19wMV85OTsgXAorICBmbG9hdDMyeDJfdCBfX3MyXzk5ID0gX19wMl85OTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjBfOTk7ICBfX3JldjBfOTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzk5LCBfX3MwXzk5LCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjFfOTk7ICBfX3JldjFfOTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzk5LCBfX3MxXzk5LCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjJfOTk7ICBfX3JldjJfOTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzk5LCBfX3MyXzk5LCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldF85OTsgXAorICBfX3JldF85OSA9IF9fbm9zd2FwX3ZmbWFfbGFuZV9mMzIoX19yZXYwXzk5LCBfX3JldjFfOTksIC1fX3JldjJfOTksIF9fcDNfOTkpOyBcCisgIF9fcmV0Xzk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfOTksIF9fcmV0Xzk5LCAxLCAwKTsgXAorICBfX3JldF85OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc2RfbGFuZXFfZjY0KF9fcDBfMTAwLCBfX3AxXzEwMCwgX19wMl8xMDAsIF9fcDNfMTAwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczBfMTAwID0gX19wMF8xMDA7IFwKKyAgZmxvYXQ2NF90IF9fczFfMTAwID0gX19wMV8xMDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8xMDAgPSBfX3AyXzEwMDsgXAorICBmbG9hdDY0X3QgX19yZXRfMTAwOyBcCisgIF9fcmV0XzEwMCA9IHZmbWFkX2xhbmVxX2Y2NChfX3MwXzEwMCwgX19zMV8xMDAsIC1fX3MyXzEwMCwgX19wM18xMDApOyBcCisgIF9fcmV0XzEwMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZmbXNkX2xhbmVxX2Y2NChfX3AwXzEwMSwgX19wMV8xMDEsIF9fcDJfMTAxLCBfX3AzXzEwMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzEwMSA9IF9fcDBfMTAxOyBcCisgIGZsb2F0NjRfdCBfX3MxXzEwMSA9IF9fcDFfMTAxOyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMTAxID0gX19wMl8xMDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyXzEwMTsgIF9fcmV2Ml8xMDEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzEwMSwgX19zMl8xMDEsIDEsIDApOyBcCisgIGZsb2F0NjRfdCBfX3JldF8xMDE7IFwKKyAgX19yZXRfMTAxID0gX19ub3N3YXBfdmZtYWRfbGFuZXFfZjY0KF9fczBfMTAxLCBfX3MxXzEwMSwgLV9fcmV2Ml8xMDEsIF9fcDNfMTAxKTsgXAorICBfX3JldF8xMDE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNzX2xhbmVxX2YzMihfX3AwXzEwMiwgX19wMV8xMDIsIF9fcDJfMTAyLCBfX3AzXzEwMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzEwMiA9IF9fcDBfMTAyOyBcCisgIGZsb2F0MzJfdCBfX3MxXzEwMiA9IF9fcDFfMTAyOyBcCisgIGZsb2F0MzJ4NF90IF9fczJfMTAyID0gX19wMl8xMDI7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzEwMjsgXAorICBfX3JldF8xMDIgPSB2Zm1hc19sYW5lcV9mMzIoX19zMF8xMDIsIF9fczFfMTAyLCAtX19zMl8xMDIsIF9fcDNfMTAyKTsgXAorICBfX3JldF8xMDI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zc19sYW5lcV9mMzIoX19wMF8xMDMsIF9fcDFfMTAzLCBfX3AyXzEwMywgX19wM18xMDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xMDMgPSBfX3AwXzEwMzsgXAorICBmbG9hdDMyX3QgX19zMV8xMDMgPSBfX3AxXzEwMzsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzEwMyA9IF9fcDJfMTAzOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2Ml8xMDM7ICBfX3JldjJfMTAzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xMDMsIF9fczJfMTAzLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyX3QgX19yZXRfMTAzOyBcCisgIF9fcmV0XzEwMyA9IF9fbm9zd2FwX3ZmbWFzX2xhbmVxX2YzMihfX3MwXzEwMywgX19zMV8xMDMsIC1fX3JldjJfMTAzLCBfX3AzXzEwMyk7IFwKKyAgX19yZXRfMTAzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Zm1zcV9sYW5lcV9mNjQoX19wMF8xMDQsIF9fcDFfMTA0LCBfX3AyXzEwNCwgX19wM18xMDQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwXzEwNCA9IF9fcDBfMTA0OyBcCisgIGZsb2F0NjR4Ml90IF9fczFfMTA0ID0gX19wMV8xMDQ7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8xMDQgPSBfX3AyXzEwNDsgXAorICBmbG9hdDY0eDJfdCBfX3JldF8xMDQ7IFwKKyAgX19yZXRfMTA0ID0gdmZtYXFfbGFuZXFfZjY0KF9fczBfMTA0LCBfX3MxXzEwNCwgLV9fczJfMTA0LCBfX3AzXzEwNCk7IFwKKyAgX19yZXRfMTA0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmZtc3FfbGFuZXFfZjY0KF9fcDBfMTA1LCBfX3AxXzEwNSwgX19wMl8xMDUsIF9fcDNfMTA1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMF8xMDUgPSBfX3AwXzEwNTsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzEwNSA9IF9fcDFfMTA1OyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMTA1ID0gX19wMl8xMDU7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYwXzEwNTsgIF9fcmV2MF8xMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzEwNSwgX19zMF8xMDUsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MV8xMDU7ICBfX3JldjFfMTA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xMDUsIF9fczFfMTA1LCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjJfMTA1OyAgX19yZXYyXzEwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMTA1LCBfX3MyXzEwNSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXRfMTA1OyBcCisgIF9fcmV0XzEwNSA9IF9fbm9zd2FwX3ZmbWFxX2xhbmVxX2Y2NChfX3JldjBfMTA1LCBfX3JldjFfMTA1LCAtX19yZXYyXzEwNSwgX19wM18xMDUpOyBcCisgIF9fcmV0XzEwNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzEwNSwgX19yZXRfMTA1LCAxLCAwKTsgXAorICBfX3JldF8xMDU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZmbXNxX2xhbmVxX2YzMihfX3AwXzEwNiwgX19wMV8xMDYsIF9fcDJfMTA2LCBfX3AzXzEwNikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczBfMTA2ID0gX19wMF8xMDY7IFwKKyAgZmxvYXQzMng0X3QgX19zMV8xMDYgPSBfX3AxXzEwNjsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzEwNiA9IF9fcDJfMTA2OyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0XzEwNjsgXAorICBfX3JldF8xMDYgPSB2Zm1hcV9sYW5lcV9mMzIoX19zMF8xMDYsIF9fczFfMTA2LCAtX19zMl8xMDYsIF9fcDNfMTA2KTsgXAorICBfX3JldF8xMDY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zcV9sYW5lcV9mMzIoX19wMF8xMDcsIF9fcDFfMTA3LCBfX3AyXzEwNywgX19wM18xMDcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwXzEwNyA9IF9fcDBfMTA3OyBcCisgIGZsb2F0MzJ4NF90IF9fczFfMTA3ID0gX19wMV8xMDc7IFwKKyAgZmxvYXQzMng0X3QgX19zMl8xMDcgPSBfX3AyXzEwNzsgXAorICBmbG9hdDMyeDRfdCBfX3JldjBfMTA3OyAgX19yZXYwXzEwNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTA3LCBfX3MwXzEwNywgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxXzEwNzsgIF9fcmV2MV8xMDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzEwNywgX19zMV8xMDcsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2Ml8xMDc7ICBfX3JldjJfMTA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xMDcsIF9fczJfMTA3LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldF8xMDc7IFwKKyAgX19yZXRfMTA3ID0gX19ub3N3YXBfdmZtYXFfbGFuZXFfZjMyKF9fcmV2MF8xMDcsIF9fcmV2MV8xMDcsIC1fX3JldjJfMTA3LCBfX3AzXzEwNyk7IFwKKyAgX19yZXRfMTA3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTA3LCBfX3JldF8xMDcsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzEwNzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc19sYW5lcV9mNjQoX19wMF8xMDgsIF9fcDFfMTA4LCBfX3AyXzEwOCwgX19wM18xMDgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzEwOCA9IF9fcDBfMTA4OyBcCisgIGZsb2F0NjR4MV90IF9fczFfMTA4ID0gX19wMV8xMDg7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8xMDggPSBfX3AyXzEwODsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8xMDg7IFwKKyAgX19yZXRfMTA4ID0gdmZtYV9sYW5lcV9mNjQoX19zMF8xMDgsIF9fczFfMTA4LCAtX19zMl8xMDgsIF9fcDNfMTA4KTsgXAorICBfX3JldF8xMDg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zX2xhbmVxX2Y2NChfX3AwXzEwOSwgX19wMV8xMDksIF9fcDJfMTA5LCBfX3AzXzEwOSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMTA5ID0gX19wMF8xMDk7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV8xMDkgPSBfX3AxXzEwOTsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzEwOSA9IF9fcDJfMTA5OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2Ml8xMDk7ICBfX3JldjJfMTA5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8xMDksIF9fczJfMTA5LCAxLCAwKTsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8xMDk7IFwKKyAgX19yZXRfMTA5ID0gX19ub3N3YXBfdmZtYV9sYW5lcV9mNjQoX19zMF8xMDksIF9fczFfMTA5LCAtX19yZXYyXzEwOSwgX19wM18xMDkpOyBcCisgIF9fcmV0XzEwOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmZtc19sYW5lcV9mMzIoX19wMF8xMTAsIF9fcDFfMTEwLCBfX3AyXzExMCwgX19wM18xMTApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwXzExMCA9IF9fcDBfMTEwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczFfMTEwID0gX19wMV8xMTA7IFwKKyAgZmxvYXQzMng0X3QgX19zMl8xMTAgPSBfX3AyXzExMDsgXAorICBmbG9hdDMyeDJfdCBfX3JldF8xMTA7IFwKKyAgX19yZXRfMTEwID0gdmZtYV9sYW5lcV9mMzIoX19zMF8xMTAsIF9fczFfMTEwLCAtX19zMl8xMTAsIF9fcDNfMTEwKTsgXAorICBfX3JldF8xMTA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Zm1zX2xhbmVxX2YzMihfX3AwXzExMSwgX19wMV8xMTEsIF9fcDJfMTExLCBfX3AzXzExMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczBfMTExID0gX19wMF8xMTE7IFwKKyAgZmxvYXQzMngyX3QgX19zMV8xMTEgPSBfX3AxXzExMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyXzExMSA9IF9fcDJfMTExOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MF8xMTE7ICBfX3JldjBfMTExID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xMTEsIF9fczBfMTExLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjFfMTExOyAgX19yZXYxXzExMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTExLCBfX3MxXzExMSwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyXzExMTsgIF9fcmV2Ml8xMTEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzExMSwgX19zMl8xMTEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0XzExMTsgXAorICBfX3JldF8xMTEgPSBfX25vc3dhcF92Zm1hX2xhbmVxX2YzMihfX3JldjBfMTExLCBfX3JldjFfMTExLCAtX19yZXYyXzExMSwgX19wM18xMTEpOyBcCisgIF9fcmV0XzExMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzExMSwgX19yZXRfMTExLCAxLCAwKTsgXAorICBfX3JldF8xMTE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZmbXNxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjRfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZmbXNxX2Y2NChfX3AwLCBfX3AxLCAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZmbXNxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjRfdCBfX3AyKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmZtc3FfZjY0KF9fcmV2MCwgX19yZXYxLCAoZmxvYXQ2NHgyX3QpIHtfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2Zm1zcV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1zcV9mMzIoX19wMCwgX19wMSwgKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2Zm1zcV9uX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZmbXNxX2YzMihfX3JldjAsIF9fcmV2MSwgKGZsb2F0MzJ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdmZtc19uX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxLCBmbG9hdDMyX3QgX19wMikgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSB2Zm1zX2YzMihfX3AwLCBfX3AxLCAoZmxvYXQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZmbXNfbl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSwgZmxvYXQzMl90IF9fcDIpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Zm1zX2YzMihfX3JldjAsIF9fcmV2MSwgKGZsb2F0MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2Z2V0X2hpZ2hfcDY0KHBvbHk2NHgyX3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZnZXRfaGlnaF9wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHBvbHk2NHgxX3QgX19ub3N3YXBfdmdldF9oaWdoX3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2Z2V0X2hpZ2hfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZnZXRfaGlnaF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2k2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9pNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjRfdCkgX19idWlsdGluX25lb25fdmdldHFfbGFuZV9pNjQoKGludDh4MTZfdClfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZnZXRxX2xhbmVfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgcG9seTY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTY0KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfaTY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRxX2xhbmVfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92Z2V0cV9sYW5lX2Y2NCgoaW50OHgxNl90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldHFfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjY0KChpbnQ4eDE2X3QpX19yZXYwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRxX2xhbmVfZjY0KChpbnQ4eDE2X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9mNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmdldF9sYW5lX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdmdldF9sYW5lX2Y2NCgoaW50OHg4X3QpX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZnZXRfbGFuZV9mNjQoKGludDh4OF90KV9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4MV90IHZnZXRfbG93X3A2NChwb2x5NjR4Ml90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDFfdCB2Z2V0X2xvd19wNjQocG9seTY0eDJfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZnZXRfbG93X2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2Z2V0X2xvd19mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfdihfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3YoX19wMCwgMzgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfdihfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV92KF9fcDAsIDQyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV92KF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfZHVwX3YoX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2R1cF92KF9fcDAsIDM4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9kdXBfdihfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfZHVwX3YoX19wMCwgNDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9kdXBfdihfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2R1cF92KF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bGQxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdmxkMXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bGQxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgNDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZsZDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdmxkMV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgNSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3AxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3A2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdThfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdThfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91MzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3U2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91MTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zOF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2Y2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YzMl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gyX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3M2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDJfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94Ml92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3U4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTY0X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91NjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMTcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczhfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3M4X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2Y2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2Y2NF94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMzJfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjE2X3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMTZfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfczMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczMyX3gyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gyX3YoJl9fcmV0LCBfX3AwLCAyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zNjRfeDIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDJfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3MxNl94MihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94Ml92KCZfX3JldCwgX19wMCwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wOF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgNCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9wMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wOF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wOF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfcDY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3AxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdThfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdThfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdTMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3UzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV91NjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdTY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91MTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zOF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2Y2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94M192KCZfX3JldCwgX19wMCwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3gzX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mMTZfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3MzMl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3M2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3MxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3MxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDNfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdThfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdThfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3U2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTY0X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3UxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfdTE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMTcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zOF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfczhfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2Y2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2Y2NF94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjMyX3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2YxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3gzX3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfZjE2X3gzKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zMzJfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zNjRfeDMoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDNfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3MxNl94MyhfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94M192KCZfX3JldCwgX19wMCwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3A4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFfcDhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfcDY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3A2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3AxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9wMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9wOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9wOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3A2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfcDE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM3KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3AxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfdThfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfdThfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91MzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNTApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3U2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91NjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3UxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV91MTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDkpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3M4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczhfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfZjY0X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9mNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9mMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX2YzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX2YxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfZjE2X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMXFfczMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMXFfczMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxcV94NF92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFxX3M2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDFxX3M2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMXFfeDRfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxcV9zMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxcV9zMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFxX3g0X3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91OF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91OF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfdTMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMTgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV91MzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxOCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91NjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxOSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3U2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV91MTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3UxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDE3KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3M4X3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zOF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX2Y2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2Y2NF94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDFfZjMyX3g0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9mMzJfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgOSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9mMTZfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX2YxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQxX3g0X3YoJl9fcmV0LCBfX3AwLCA4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3MzMl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMV9zNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMV9zNjRfeDQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDFfeDRfdigmX19yZXQsIF9fcDAsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQxX3MxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQxX3MxNl94NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMV94NF92KCZfX3JldCwgX19wMCwgMSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMl9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfdTY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfZHVwX3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3A4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF91OChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfdTE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9mMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9kdXBfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2R1cF92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9kdXBfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2R1cF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMl9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBwb2x5OHgxNngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkMnFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3U4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDQ4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQycV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDMyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQ4eDE2eDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQycV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJxX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkMnFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3AyLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDJxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQycV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgaW50NjR4MngyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMnFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19wMiwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDF4Ml90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDJfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MXgyX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkMl9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDJfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQyX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQyX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxeDJfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQyX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM192KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfdigmX19yZXQsIF9fcDAsIDM1KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3AxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzcpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF91MzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDUwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDUxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9zOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9mMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4OHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCA0MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgNDApOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfZHVwX3MzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9kdXBfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2R1cF9zMTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2R1cF92KCZfX3JldCwgX19wMCwgMzMpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfZHVwX3YoJl9fcmV0LCBfX3AwLCAxMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzX2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19kdXBfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzNik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQzcV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgcG9seTY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDNxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICB1aW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgX19wMiwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM3FfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZ4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDNxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzcV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM3FfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM3FfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBpbnQ2NHgyeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzcV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkM19sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDF4M190IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDNfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQzX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxeDNfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQzX2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkM19sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MXgzX3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkM19sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X3YoJl9fcmV0LCBfX3AwLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF92KCZfX3JldCwgX19wMCwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3A2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA1MSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV91NjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX3YoJl9fcmV0LCBfX3AwLCA0Mik7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfczY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9kdXBfcDY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfcDgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9wOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzYpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9wNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfcDE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNyk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3U4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA0OCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfdTgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQ4KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfdTMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCA1MCk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3U2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNTEpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF91MTYoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQ5KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfczgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3M4KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDMyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfZjY0KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQyKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfZjMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX2YzMihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQxKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfZjE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgNDApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX2YxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDQwKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9kdXBfczMyKF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDM0KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2R1cF9zMzIoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzQpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2R1cF9zNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2R1cF92KCZfX3JldCwgX19wMCwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfZHVwX3M2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfZHVwX3MxNihfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfZHVwX3YoJl9fcmV0LCBfX3AwLCAzMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9kdXBfczE2KF9fcDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9kdXBfdigmX19yZXQsIF9fcDAsIDMzKTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2R1cF9mNjQoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9kdXBfdigmX19yZXQsIF9fcDAsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfZHVwX2Y2NChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2R1cF92KCZfX3JldCwgX19wMCwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDM2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDM2KTsgXAorIFwKKyAgX19yZXQudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzBdLCBfX3JldC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsxXSwgX19yZXQudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMl0sIF9fcmV0LnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzNdLCBfX3JldC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgNDgpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNDgpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDUxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICB1aW50NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCA1MSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZ4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRxX2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgMzIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDQyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZDRxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIGZsb2F0NjR4Mng0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNHFfbGFuZV92KCZfX3JldCwgX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgNDIpOyBcCisgXAorICBfX3JldC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMF0sIF9fcmV0LnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzFdLCBfX3JldC52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFsyXSwgX19yZXQudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbM10sIF9fcmV0LnZhbFszXSwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZsZDRxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMzUpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNHFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBpbnQ2NHgyeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0cV9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAzNSk7IFwKKyBcCisgIF9fcmV0LnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFswXSwgX19yZXQudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldC52YWxbMV0sIF9fcmV0LnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXQudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQudmFsWzJdLCBfX3JldC52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV0LnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LnZhbFszXSwgX19yZXQudmFsWzNdLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgMTkpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bGQ0X2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmxkNF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDF4NF90IF9fcmV0OyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZsZDRfbGFuZV92KCZfX3JldCwgX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkNF9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MXg0X3QgX19yZXQ7IFwKKyAgX19idWlsdGluX25lb25fdmxkNF9sYW5lX3YoJl9fcmV0LCBfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bGQ0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgxeDRfdCBfX3JldDsgXAorICBfX2J1aWx0aW5fbmVvbl92bGQ0X2xhbmVfdigmX19yZXQsIF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmxkcnFfcDEyOChfX3AwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTEyOF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHkxMjhfdCkgX19idWlsdGluX25lb25fdmxkcnFfcDEyOChfX3AwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZsZHJxX3AxMjgoX19wMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxMjhfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5MTI4X3QpIF9fYnVpbHRpbl9uZW9uX3ZsZHJxX3AxMjgoX19wMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtYXhxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bWF4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtYXhfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtYXhfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bWF4X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZtYXhubXZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm12cV9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZtYXhubXZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1heG5tdnFfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm1heG5tdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXhubXZxX2YzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm1heG5tdnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm12cV9mMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bWF4bm12X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4bm12X2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bWF4bm12X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1heG5tdl9mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2bWF4dnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV91OCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZtYXh2cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1heHZxX3U4KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJfdCB2bWF4dnFfdTMyKHVpbnQzMng0X3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV91MzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3Qgdm1heHZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2bWF4dnFfdTE2KHVpbnQxNng4X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV91MTYoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3Qgdm1heHZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfdTE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3Qgdm1heHZxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfczgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZtYXh2cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfczgoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2bWF4dnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZtYXh2cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9mNjQoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2bWF4dnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9mMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtYXh2cV9mMzIoZmxvYXQzMng0X3QgX19wMCkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9mMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3Qgdm1heHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfczMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3Qgdm1heHZxX3MzMihpbnQzMng0X3QgX19wMCkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9zMzIoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3Qgdm1heHZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dnFfczE2KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3Qgdm1heHZxX3MxNihpbnQxNng4X3QgX19wMCkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2cV9zMTYoKGludDh4MTZfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3Qgdm1heHZfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1heHZfdTgoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZtYXh2X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdm1heHZfdTgoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3Qgdm1heHZfdTMyKHVpbnQzMngyX3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3UzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZtYXh2X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl91MzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3Qgdm1heHZfdTE2KHVpbnQxNng0X3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3UxNigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZtYXh2X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl91MTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZtYXh2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3M4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZtYXh2X3M4KGludDh4OF90IF9fcDApIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zOCgoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm1heHZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bWF4dl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZtYXh2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZtYXh2X3MzMihpbnQzMngyX3QgX19wMCkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3MzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZtYXh2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWF4dl9zMTYoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZtYXh2X3MxNihpbnQxNng0X3QgX19wMCkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZtYXh2X3MxNigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bWlucV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm1pbnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bWluX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bWluX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm1pbl92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2bWlubm12cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm1pbm5tdnFfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2bWlubm12cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZxX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtaW5ubXZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWlubm12cV9mMzIoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZtaW5ubXZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbm5tdnFfZjMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm1pbm5tdl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm1pbm5tdl9mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm1pbm5tdl9mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW5ubXZfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3Qgdm1pbnZxX3U4KHVpbnQ4eDE2X3QgX19wMCkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfdTgoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2bWludnFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52cV91OCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3Qgdm1pbnZxX3UzMih1aW50MzJ4NF90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfdTMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZtaW52cV91MzIodWludDMyeDRfdCBfX3AwKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3UzMigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3Qgdm1pbnZxX3UxNih1aW50MTZ4OF90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfdTE2KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZtaW52cV91MTYodWludDE2eDhfdCBfX3AwKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3UxNigoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZtaW52cV9zOChpbnQ4eDE2X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3M4KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2bWludnFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3M4KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3Qgdm1pbnZxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2bWludnFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm1pbnZxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfZjMyKChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bWludnFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfZjMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZtaW52cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3MzMigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZtaW52cV9zMzIoaW50MzJ4NF90IF9fcDApIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfczMyKChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZtaW52cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZxX3MxNigoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZtaW52cV9zMTYoaW50MTZ4OF90IF9fcDApIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWludnFfczE2KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OF90IHZtaW52X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3U4KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2bWludl91OCh1aW50OHg4X3QgX19wMCkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtaW52X3U4KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZtaW52X3UzMih1aW50MzJ4Ml90IF9fcDApIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludl91MzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2bWludl91MzIodWludDMyeDJfdCBfX3AwKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfdTMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZtaW52X3UxNih1aW50MTZ4NF90IF9fcDApIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWludl91MTYoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2bWludl91MTYodWludDE2eDRfdCBfX3AwKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZfdTE2KChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2bWludl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92bWludl9zOCgoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2bWludl9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdm1pbnZfczgoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZtaW52X2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludl9mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3Qgdm1pbnZfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludl9mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2bWludl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdm1pbnZfczMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2bWludl9zMzIoaW50MzJ4Ml90IF9fcDApIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92bWludl9zMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2bWludl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdm1pbnZfczE2KChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2bWludl9zMTYoaW50MTZ4NF90IF9fcDApIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92bWludl9zMTYoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1sYXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bWxhcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bWxhX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm1sYV9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYXFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhcV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhcV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bWxhcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19wMSAqIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bWxhcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fcmV2MSAqIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF91MzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF91MTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKyB2bXVsbF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sYWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3Qgdm1sc3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEsIGZsb2F0NjR4Ml90IF9fcDIpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fcDEgKiBfX3AyOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bWxzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSwgZmxvYXQ2NHgyX3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX3JldjI7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bWxzX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxLCBmbG9hdDY0eDFfdCBfX3AyKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxICogX19wMjsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm1sc19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSwgZmxvYXQ2NHgxX3QgX19wMikgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIF9fcDI7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc3FfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNxX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzcV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzcV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19yZXYxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc19sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gX19zMSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc19sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSBfX3MxICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIF9fczEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjEgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMyk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bWxzcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMSAqIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bWxzcV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxLCBmbG9hdDY0X3QgX19wMikgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fcmV2MSAqIChmbG9hdDY0eDJfdCkge19fcDIsIF9fcDJ9OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3UzMih2Z2V0X2hpZ2hfdTMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF91MzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF91MTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAtIHZtdWxsX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxzbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDFfdCB2bW92X25fcDY0KHBvbHk2NF90IF9fcDApIHsKKyAgcG9seTY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTY0eDFfdCkge19fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4MV90IHZtb3Zfbl9wNjQocG9seTY0X3QgX19wMCkgeworICBwb2x5NjR4MV90IF9fcmV0OworICBfX3JldCA9IChwb2x5NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2bW92cV9uX3A2NChwb2x5NjRfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2bW92cV9uX3A2NChwb2x5NjRfdCBfX3AwKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtb3ZxX25fZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkge19fcDAsIF9fcDB9OworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2bW92cV9uX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIHtfX3AwLCBfX3AwfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtb3Zfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtb3Zfbl9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSB7X19wMH07CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bW92bF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMF8xMTIpIHsKKyAgdWludDE2eDhfdCBfX3JldF8xMTI7CisgIHVpbnQ4eDhfdCBfX2ExXzExMiA9IHZnZXRfaGlnaF91OChfX3AwXzExMik7CisgIF9fcmV0XzExMiA9ICh1aW50MTZ4OF90KSh2c2hsbF9uX3U4KF9fYTFfMTEyLCAwKSk7CisgIHJldHVybiBfX3JldF8xMTI7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtb3ZsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwXzExMykgeworICB1aW50OHgxNl90IF9fcmV2MF8xMTM7ICBfX3JldjBfMTEzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMF8xMTMsIF9fcDBfMTEzLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldF8xMTM7CisgIHVpbnQ4eDhfdCBfX2ExXzExMyA9IF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjBfMTEzKTsKKyAgX19yZXRfMTEzID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3ZzaGxsX25fdTgoX19hMV8xMTMsIDApKTsKKyAgX19yZXRfMTEzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTEzLCBfX3JldF8xMTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXRfMTEzOworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwXzExNCkgeworICB1aW50MTZ4OF90IF9fcmV0XzExNDsKKyAgdWludDh4OF90IF9fYTFfMTE0ID0gX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcDBfMTE0KTsKKyAgX19yZXRfMTE0ID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3ZzaGxsX25fdTgoX19hMV8xMTQsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzExNDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bW92bF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDBfMTE1KSB7CisgIHVpbnQ2NHgyX3QgX19yZXRfMTE1OworICB1aW50MzJ4Ml90IF9fYTFfMTE1ID0gdmdldF9oaWdoX3UzMihfX3AwXzExNSk7CisgIF9fcmV0XzExNSA9ICh1aW50NjR4Ml90KSh2c2hsbF9uX3UzMihfX2ExXzExNSwgMCkpOworICByZXR1cm4gX19yZXRfMTE1OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bW92bF9oaWdoX3UzMih1aW50MzJ4NF90IF9fcDBfMTE2KSB7CisgIHVpbnQzMng0X3QgX19yZXYwXzExNjsgIF9fcmV2MF8xMTYgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwXzExNiwgX19wMF8xMTYsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0XzExNjsKKyAgdWludDMyeDJfdCBfX2ExXzExNiA9IF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwXzExNik7CisgIF9fcmV0XzExNiA9ICh1aW50NjR4Ml90KShfX25vc3dhcF92c2hsbF9uX3UzMihfX2ExXzExNiwgMCkpOworICBfX3JldF8xMTYgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMTYsIF9fcmV0XzExNiwgMSwgMCk7CisgIHJldHVybiBfX3JldF8xMTY7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdm1vdmxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwXzExNykgeworICB1aW50NjR4Ml90IF9fcmV0XzExNzsKKyAgdWludDMyeDJfdCBfX2ExXzExNyA9IF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19wMF8xMTcpOworICBfX3JldF8xMTcgPSAodWludDY0eDJfdCkoX19ub3N3YXBfdnNobGxfbl91MzIoX19hMV8xMTcsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzExNzsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bW92bF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDBfMTE4KSB7CisgIHVpbnQzMng0X3QgX19yZXRfMTE4OworICB1aW50MTZ4NF90IF9fYTFfMTE4ID0gdmdldF9oaWdoX3UxNihfX3AwXzExOCk7CisgIF9fcmV0XzExOCA9ICh1aW50MzJ4NF90KSh2c2hsbF9uX3UxNihfX2ExXzExOCwgMCkpOworICByZXR1cm4gX19yZXRfMTE4OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bW92bF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDBfMTE5KSB7CisgIHVpbnQxNng4X3QgX19yZXYwXzExOTsgIF9fcmV2MF8xMTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwXzExOSwgX19wMF8xMTksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0XzExOTsKKyAgdWludDE2eDRfdCBfX2ExXzExOSA9IF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYwXzExOSk7CisgIF9fcmV0XzExOSA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92c2hsbF9uX3UxNihfX2ExXzExOSwgMCkpOworICBfX3JldF8xMTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMTksIF9fcmV0XzExOSwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldF8xMTk7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm1vdmxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwXzEyMCkgeworICB1aW50MzJ4NF90IF9fcmV0XzEyMDsKKyAgdWludDE2eDRfdCBfX2ExXzEyMCA9IF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19wMF8xMjApOworICBfX3JldF8xMjAgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl91MTYoX19hMV8xMjAsIDApKTsKKyAgcmV0dXJuIF9fcmV0XzEyMDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtb3ZsX2hpZ2hfczgoaW50OHgxNl90IF9fcDBfMTIxKSB7CisgIGludDE2eDhfdCBfX3JldF8xMjE7CisgIGludDh4OF90IF9fYTFfMTIxID0gdmdldF9oaWdoX3M4KF9fcDBfMTIxKTsKKyAgX19yZXRfMTIxID0gKGludDE2eDhfdCkodnNobGxfbl9zOChfX2ExXzEyMSwgMCkpOworICByZXR1cm4gX19yZXRfMTIxOworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtb3ZsX2hpZ2hfczgoaW50OHgxNl90IF9fcDBfMTIyKSB7CisgIGludDh4MTZfdCBfX3JldjBfMTIyOyAgX19yZXYwXzEyMiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDBfMTIyLCBfX3AwXzEyMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldF8xMjI7CisgIGludDh4OF90IF9fYTFfMTIyID0gX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MF8xMjIpOworICBfX3JldF8xMjIgPSAoaW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3M4KF9fYTFfMTIyLCAwKSk7CisgIF9fcmV0XzEyMiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzEyMiwgX19yZXRfMTIyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0XzEyMjsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczgoaW50OHgxNl90IF9fcDBfMTIzKSB7CisgIGludDE2eDhfdCBfX3JldF8xMjM7CisgIGludDh4OF90IF9fYTFfMTIzID0gX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcDBfMTIzKTsKKyAgX19yZXRfMTIzID0gKGludDE2eDhfdCkoX19ub3N3YXBfdnNobGxfbl9zOChfX2ExXzEyMywgMCkpOworICByZXR1cm4gX19yZXRfMTIzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1vdmxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDBfMTI0KSB7CisgIGludDY0eDJfdCBfX3JldF8xMjQ7CisgIGludDMyeDJfdCBfX2ExXzEyNCA9IHZnZXRfaGlnaF9zMzIoX19wMF8xMjQpOworICBfX3JldF8xMjQgPSAoaW50NjR4Ml90KSh2c2hsbF9uX3MzMihfX2ExXzEyNCwgMCkpOworICByZXR1cm4gX19yZXRfMTI0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtb3ZsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwXzEyNSkgeworICBpbnQzMng0X3QgX19yZXYwXzEyNTsgIF9fcmV2MF8xMjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwXzEyNSwgX19wMF8xMjUsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXRfMTI1OworICBpbnQzMngyX3QgX19hMV8xMjUgPSBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MF8xMjUpOworICBfX3JldF8xMjUgPSAoaW50NjR4Ml90KShfX25vc3dhcF92c2hsbF9uX3MzMihfX2ExXzEyNSwgMCkpOworICBfX3JldF8xMjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xMjUsIF9fcmV0XzEyNSwgMSwgMCk7CisgIHJldHVybiBfX3JldF8xMjU7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92bW92bF9oaWdoX3MzMihpbnQzMng0X3QgX19wMF8xMjYpIHsKKyAgaW50NjR4Ml90IF9fcmV0XzEyNjsKKyAgaW50MzJ4Ml90IF9fYTFfMTI2ID0gX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3AwXzEyNik7CisgIF9fcmV0XzEyNiA9IChpbnQ2NHgyX3QpKF9fbm9zd2FwX3ZzaGxsX25fczMyKF9fYTFfMTI2LCAwKSk7CisgIHJldHVybiBfX3JldF8xMjY7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bW92bF9oaWdoX3MxNihpbnQxNng4X3QgX19wMF8xMjcpIHsKKyAgaW50MzJ4NF90IF9fcmV0XzEyNzsKKyAgaW50MTZ4NF90IF9fYTFfMTI3ID0gdmdldF9oaWdoX3MxNihfX3AwXzEyNyk7CisgIF9fcmV0XzEyNyA9IChpbnQzMng0X3QpKHZzaGxsX25fczE2KF9fYTFfMTI3LCAwKSk7CisgIHJldHVybiBfX3JldF8xMjc7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1vdmxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDBfMTI4KSB7CisgIGludDE2eDhfdCBfX3JldjBfMTI4OyAgX19yZXYwXzEyOCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDBfMTI4LCBfX3AwXzEyOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldF8xMjg7CisgIGludDE2eDRfdCBfX2ExXzEyOCA9IF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwXzEyOCk7CisgIF9fcmV0XzEyOCA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3ZzaGxsX25fczE2KF9fYTFfMTI4LCAwKSk7CisgIF9fcmV0XzEyOCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzEyOCwgX19yZXRfMTI4LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0XzEyODsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwXzEyOSkgeworICBpbnQzMng0X3QgX19yZXRfMTI5OworICBpbnQxNng0X3QgX19hMV8xMjkgPSBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcDBfMTI5KTsKKyAgX19yZXRfMTI5ID0gKGludDMyeDRfdCkoX19ub3N3YXBfdnNobGxfbl9zMTYoX19hMV8xMjksIDApKTsKKyAgcmV0dXJuIF9fcmV0XzEyOTsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bW92bl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UxNihfX3AwLCB2bW92bl91MzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZtb3ZuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdm1vdm5fdTMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bW92bl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UzMihfX3AwLCB2bW92bl91NjQoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtb3ZuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTMyKF9fcmV2MCwgX19ub3N3YXBfdm1vdm5fdTY0KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2bW92bl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTgoX19wMCwgdm1vdm5fdTE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2bW92bl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OChfX3JldjAsIF9fbm9zd2FwX3Ztb3ZuX3UxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bW92bl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MxNihfX3AwLCB2bW92bl9zMzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1vdm5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdm1vdm5fczMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtb3ZuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczMyKF9fcDAsIHZtb3ZuX3M2NChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bW92bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMzIoX19yZXYwLCBfX25vc3dhcF92bW92bl9zNjQoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3Qgdm1vdm5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZtb3ZuX3MxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2bW92bl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczgoX19yZXYwLCBfX25vc3dhcF92bW92bl9zMTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bXVscV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm11bHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bXVsX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2bXVsX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKiBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxkX2xhbmVfZjY0KF9fcDBfMTMwLCBfX3AxXzEzMCwgX19wMl8xMzApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xMzAgPSBfX3AwXzEzMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzEzMCA9IF9fcDFfMTMwOyBcCisgIGZsb2F0NjRfdCBfX3JldF8xMzA7IFwKKyAgX19yZXRfMTMwID0gX19zMF8xMzAgKiB2Z2V0X2xhbmVfZjY0KF9fczFfMTMwLCBfX3AyXzEzMCk7IFwKKyAgX19yZXRfMTMwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGRfbGFuZV9mNjQoX19wMF8xMzEsIF9fcDFfMTMxLCBfX3AyXzEzMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzEzMSA9IF9fcDBfMTMxOyBcCisgIGZsb2F0NjR4MV90IF9fczFfMTMxID0gX19wMV8xMzE7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzEzMTsgXAorICBfX3JldF8xMzEgPSBfX3MwXzEzMSAqIF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMV8xMzEsIF9fcDJfMTMxKTsgXAorICBfX3JldF8xMzE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxzX2xhbmVfZjMyKF9fcDBfMTMyLCBfX3AxXzEzMiwgX19wMl8xMzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xMzIgPSBfX3AwXzEzMjsgXAorICBmbG9hdDMyeDJfdCBfX3MxXzEzMiA9IF9fcDFfMTMyOyBcCisgIGZsb2F0MzJfdCBfX3JldF8xMzI7IFwKKyAgX19yZXRfMTMyID0gX19zMF8xMzIgKiB2Z2V0X2xhbmVfZjMyKF9fczFfMTMyLCBfX3AyXzEzMik7IFwKKyAgX19yZXRfMTMyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHNfbGFuZV9mMzIoX19wMF8xMzMsIF9fcDFfMTMzLCBfX3AyXzEzMykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzEzMyA9IF9fcDBfMTMzOyBcCisgIGZsb2F0MzJ4Ml90IF9fczFfMTMzID0gX19wMV8xMzM7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxXzEzMzsgIF9fcmV2MV8xMzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzEzMywgX19zMV8xMzMsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldF8xMzM7IFwKKyAgX19yZXRfMTMzID0gX19zMF8xMzMgKiBfX25vc3dhcF92Z2V0X2xhbmVfZjMyKF9fcmV2MV8xMzMsIF9fcDJfMTMzKTsgXAorICBfX3JldF8xMzM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bXVsX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bXVsX2xhbmVfdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsZF9sYW5lcV9mNjQoX19wMF8xMzQsIF9fcDFfMTM0LCBfX3AyXzEzNCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzEzNCA9IF9fcDBfMTM0OyBcCisgIGZsb2F0NjR4Ml90IF9fczFfMTM0ID0gX19wMV8xMzQ7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzEzNDsgXAorICBfX3JldF8xMzQgPSBfX3MwXzEzNCAqIHZnZXRxX2xhbmVfZjY0KF9fczFfMTM0LCBfX3AyXzEzNCk7IFwKKyAgX19yZXRfMTM0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGRfbGFuZXFfZjY0KF9fcDBfMTM1LCBfX3AxXzEzNSwgX19wMl8xMzUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xMzUgPSBfX3AwXzEzNTsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzEzNSA9IF9fcDFfMTM1OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MV8xMzU7ICBfX3JldjFfMTM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xMzUsIF9fczFfMTM1LCAxLCAwKTsgXAorICBmbG9hdDY0X3QgX19yZXRfMTM1OyBcCisgIF9fcmV0XzEzNSA9IF9fczBfMTM1ICogX19ub3N3YXBfdmdldHFfbGFuZV9mNjQoX19yZXYxXzEzNSwgX19wMl8xMzUpOyBcCisgIF9fcmV0XzEzNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHNfbGFuZXFfZjMyKF9fcDBfMTM2LCBfX3AxXzEzNiwgX19wMl8xMzYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xMzYgPSBfX3AwXzEzNjsgXAorICBmbG9hdDMyeDRfdCBfX3MxXzEzNiA9IF9fcDFfMTM2OyBcCisgIGZsb2F0MzJfdCBfX3JldF8xMzY7IFwKKyAgX19yZXRfMTM2ID0gX19zMF8xMzYgKiB2Z2V0cV9sYW5lX2YzMihfX3MxXzEzNiwgX19wMl8xMzYpOyBcCisgIF9fcmV0XzEzNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxzX2xhbmVxX2YzMihfX3AwXzEzNywgX19wMV8xMzcsIF9fcDJfMTM3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTM3ID0gX19wMF8xMzc7IFwKKyAgZmxvYXQzMng0X3QgX19zMV8xMzcgPSBfX3AxXzEzNzsgXAorICBmbG9hdDMyeDRfdCBfX3JldjFfMTM3OyAgX19yZXYxXzEzNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTM3LCBfX3MxXzEzNywgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzEzNzsgXAorICBfX3JldF8xMzcgPSBfX3MwXzEzNyAqIF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjMyKF9fcmV2MV8xMzcsIF9fcDJfMTM3KTsgXAorICBfX3JldF8xMzc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDEwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9sYW5lcV92KChpbnQ4eDhfdClfX3MwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMTApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVscV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHFfbGFuZXFfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lcV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVscV9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsX2xhbmVxX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICogX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCAqIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMik7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2bXVsX25fZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bF9uX2Y2NCgoaW50OHg4X3QpX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4MV90IHZtdWxfbl9mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bXVsX25fZjY0KChpbnQ4eDhfdClfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bXVscV9uX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICogKGZsb2F0NjR4Ml90KSB7X19wMSwgX19wMX07CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtdWxxX25fZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKiAoZmxvYXQ2NHgyX3QpIHtfX3AxLCBfX3AxfTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2bXVsbF9wNjQocG9seTY0X3QgX19wMCwgcG9seTY0X3QgX19wMSkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHkxMjhfdCkgX19idWlsdGluX25lb25fdm11bGxfcDY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3Qgdm11bGxfcDY0KHBvbHk2NF90IF9fcDAsIHBvbHk2NF90IF9fcDEpIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3A2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBwb2x5MTI4X3QgX19ub3N3YXBfdm11bGxfcDY0KHBvbHk2NF90IF9fcDAsIHBvbHk2NF90IF9fcDEpIHsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IChwb2x5MTI4X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWxsX3A2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZtdWxsX2hpZ2hfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9wOCh2Z2V0X2hpZ2hfcDgoX19wMCksIHZnZXRfaGlnaF9wOChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3Qgdm11bGxfaGlnaF9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3A4KF9fbm9zd2FwX3ZnZXRfaGlnaF9wOChfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfcDgoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtdWxsX2hpZ2hfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF91OCh2Z2V0X2hpZ2hfdTgoX19wMCksIHZnZXRfaGlnaF91OChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm11bGxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3U4KF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtdWxsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19wMCksIHZnZXRfaGlnaF91MzIoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtdWxsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF91MTYodmdldF9oaWdoX3UxNihfX3AwKSwgdmdldF9oaWdoX3UxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm11bGxfaGlnaF91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtdWxsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9zOCh2Z2V0X2hpZ2hfczgoX19wMCksIHZnZXRfaGlnaF9zOChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2bXVsbF9oaWdoX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3M4KF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm11bGxfaGlnaF9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3AwKSwgdmdldF9oaWdoX3MzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bXVsbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtdWxsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19wMCksIHZnZXRfaGlnaF9zMTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm11bGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxMjhfdCB2bXVsbF9oaWdoX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5MTI4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfcDY0KChwb2x5NjRfdCkodmdldF9oaWdoX3A2NChfX3AwKSksIChwb2x5NjRfdCkodmdldF9oaWdoX3A2NChfX3AxKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTI4X3Qgdm11bGxfaGlnaF9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTEyOF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3A2NCgocG9seTY0X3QpKF9fbm9zd2FwX3ZnZXRfaGlnaF9wNjQoX19yZXYwKSksIChwb2x5NjRfdCkoX19ub3N3YXBfdmdldF9oaWdoX3A2NChfX3JldjEpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF91MzIodmdldF9oaWdoX3UzMihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfczE2KHZnZXRfaGlnaF9zMTYoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTMyKHZnZXRfaGlnaF91MzIoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTE2KHZnZXRfaGlnaF91MTYoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfdTE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfczMyKHZnZXRfaGlnaF9zMzIoX19zMCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtdWxsX2hpZ2hfbl91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm11bGxfbl91MzIodmdldF9oaWdoX3UzMihfX3AwKSwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm11bGxfaGlnaF9uX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9uX3UzMihfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MCksIF9fcDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bXVsbF9oaWdoX25fdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX25fdTE2KHZnZXRfaGlnaF91MTYoX19wMCksIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtdWxsX2hpZ2hfbl91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfbl91MTYoX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjApLCBfX3AxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bXVsbF9oaWdoX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtdWxsX25fczMyKHZnZXRfaGlnaF9zMzIoX19wMCksIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm11bGxfaGlnaF9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX25fczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19wMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm11bGxfaGlnaF9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bXVsbF9uX3MxNih2Z2V0X2hpZ2hfczE2KF9fcDApLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtdWxsX2hpZ2hfbl9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bXVsbF9uX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fcDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bGxfbGFuZXFfdTMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWxsX3UzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVsbF9sYW5lcV91MzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVsbF9sYW5lcV91MTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bGxfdTE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWxsX2xhbmVxX3UxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWxsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVsbF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bGxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZtdWx4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZtdWx4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdm11bHhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDY0eDJfdCBfX25vc3dhcF92bXVseHFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92bXVseHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZtdWx4cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZtdWx4cV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdm11bHhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyeDRfdCBfX25vc3dhcF92bXVseHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92bXVseHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4MV90IHZtdWx4X2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdm11bHhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm11bHhfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92bXVseF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZtdWx4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm11bHhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2bXVseF9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm11bHhfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0MzJ4Ml90IF9fbm9zd2FwX3ZtdWx4X2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdm11bHhfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2bXVseGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm11bHhkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZtdWx4ZF9mNjQoZmxvYXQ2NF90IF9fcDAsIGZsb2F0NjRfdCBfX3AxKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bXVseGRfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGZsb2F0NjRfdCBfX25vc3dhcF92bXVseGRfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdm11bHhkX2Y2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3Qgdm11bHhzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2bXVseHNfZjMyKGZsb2F0MzJfdCBfX3AwLCBmbG9hdDMyX3QgX19wMSkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdm11bHhzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBmbG9hdDMyX3QgX19ub3N3YXBfdm11bHhzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZtdWx4c19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhkX2xhbmVfZjY0KF9fcDBfMTM4LCBfX3AxXzEzOCwgX19wMl8xMzgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xMzggPSBfX3AwXzEzODsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzEzOCA9IF9fcDFfMTM4OyBcCisgIGZsb2F0NjRfdCBfX3JldF8xMzg7IFwKKyAgX19yZXRfMTM4ID0gdm11bHhkX2Y2NChfX3MwXzEzOCwgdmdldF9sYW5lX2Y2NChfX3MxXzEzOCwgX19wMl8xMzgpKTsgXAorICBfX3JldF8xMzg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseGRfbGFuZV9mNjQoX19wMF8xMzksIF9fcDFfMTM5LCBfX3AyXzEzOSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzEzOSA9IF9fcDBfMTM5OyBcCisgIGZsb2F0NjR4MV90IF9fczFfMTM5ID0gX19wMV8xMzk7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzEzOTsgXAorICBfX3JldF8xMzkgPSBfX25vc3dhcF92bXVseGRfZjY0KF9fczBfMTM5LCBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczFfMTM5LCBfX3AyXzEzOSkpOyBcCisgIF9fcmV0XzEzOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhzX2xhbmVfZjMyKF9fcDBfMTQwLCBfX3AxXzE0MCwgX19wMl8xNDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xNDAgPSBfX3AwXzE0MDsgXAorICBmbG9hdDMyeDJfdCBfX3MxXzE0MCA9IF9fcDFfMTQwOyBcCisgIGZsb2F0MzJfdCBfX3JldF8xNDA7IFwKKyAgX19yZXRfMTQwID0gdm11bHhzX2YzMihfX3MwXzE0MCwgdmdldF9sYW5lX2YzMihfX3MxXzE0MCwgX19wMl8xNDApKTsgXAorICBfX3JldF8xNDA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseHNfbGFuZV9mMzIoX19wMF8xNDEsIF9fcDFfMTQxLCBfX3AyXzE0MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJfdCBfX3MwXzE0MSA9IF9fcDBfMTQxOyBcCisgIGZsb2F0MzJ4Ml90IF9fczFfMTQxID0gX19wMV8xNDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXYxXzE0MTsgIF9fcmV2MV8xNDEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE0MSwgX19zMV8xNDEsIDEsIDApOyBcCisgIGZsb2F0MzJfdCBfX3JldF8xNDE7IFwKKyAgX19yZXRfMTQxID0gX19ub3N3YXBfdm11bHhzX2YzMihfX3MwXzE0MSwgX19ub3N3YXBfdmdldF9sYW5lX2YzMihfX3JldjFfMTQxLCBfX3AyXzE0MSkpOyBcCisgIF9fcmV0XzE0MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWx4cV9mNjQoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4cV9mNjQoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdm11bHhxX2YzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseHFfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bHhxX2YzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseF9sYW5lX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVseF9mMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhfbGFuZV9mMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bHhfZjMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4ZF9sYW5lcV9mNjQoX19wMF8xNDIsIF9fcDFfMTQyLCBfX3AyXzE0MikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwXzE0MiA9IF9fcDBfMTQyOyBcCisgIGZsb2F0NjR4Ml90IF9fczFfMTQyID0gX19wMV8xNDI7IFwKKyAgZmxvYXQ2NF90IF9fcmV0XzE0MjsgXAorICBfX3JldF8xNDIgPSB2bXVseGRfZjY0KF9fczBfMTQyLCB2Z2V0cV9sYW5lX2Y2NChfX3MxXzE0MiwgX19wMl8xNDIpKTsgXAorICBfX3JldF8xNDI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseGRfbGFuZXFfZjY0KF9fcDBfMTQzLCBfX3AxXzE0MywgX19wMl8xNDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0X3QgX19zMF8xNDMgPSBfX3AwXzE0MzsgXAorICBmbG9hdDY0eDJfdCBfX3MxXzE0MyA9IF9fcDFfMTQzOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MV8xNDM7ICBfX3JldjFfMTQzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNDMsIF9fczFfMTQzLCAxLCAwKTsgXAorICBmbG9hdDY0X3QgX19yZXRfMTQzOyBcCisgIF9fcmV0XzE0MyA9IF9fbm9zd2FwX3ZtdWx4ZF9mNjQoX19zMF8xNDMsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfZjY0KF9fcmV2MV8xNDMsIF9fcDJfMTQzKSk7IFwKKyAgX19yZXRfMTQzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseHNfbGFuZXFfZjMyKF9fcDBfMTQ0LCBfX3AxXzE0NCwgX19wMl8xNDQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyX3QgX19zMF8xNDQgPSBfX3AwXzE0NDsgXAorICBmbG9hdDMyeDRfdCBfX3MxXzE0NCA9IF9fcDFfMTQ0OyBcCisgIGZsb2F0MzJfdCBfX3JldF8xNDQ7IFwKKyAgX19yZXRfMTQ0ID0gdm11bHhzX2YzMihfX3MwXzE0NCwgdmdldHFfbGFuZV9mMzIoX19zMV8xNDQsIF9fcDJfMTQ0KSk7IFwKKyAgX19yZXRfMTQ0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhzX2xhbmVxX2YzMihfX3AwXzE0NSwgX19wMV8xNDUsIF9fcDJfMTQ1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMl90IF9fczBfMTQ1ID0gX19wMF8xNDU7IFwKKyAgZmxvYXQzMng0X3QgX19zMV8xNDUgPSBfX3AxXzE0NTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjFfMTQ1OyAgX19yZXYxXzE0NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTQ1LCBfX3MxXzE0NSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMl90IF9fcmV0XzE0NTsgXAorICBfX3JldF8xNDUgPSBfX25vc3dhcF92bXVseHNfZjMyKF9fczBfMTQ1LCBfX25vc3dhcF92Z2V0cV9sYW5lX2YzMihfX3JldjFfMTQ1LCBfX3AyXzE0NSkpOyBcCisgIF9fcmV0XzE0NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhxX2xhbmVxX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVseHFfZjY0KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtdWx4cV9sYW5lcV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdm11bHhxX2Y2NChfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseHFfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZtdWx4cV9mMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhxX2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgZmxvYXQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92bXVseHFfZjMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtdWx4X2xhbmVxX2YzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgZmxvYXQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2bXVseF9mMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhfbGFuZXFfZjMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZtdWx4X2YzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2bmVncV9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAtX19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3Qgdm5lZ3FfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IC1fX3JldjA7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm5lZ3FfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAtX19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZuZWdxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAtX19yZXYwOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3Qgdm5lZ19mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAtX19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3Qgdm5lZ19mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAtX19wMDsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3Qgdm5lZ19zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3Qgdm5lZ19zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IC1fX3AwOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3Qgdm5lZ2RfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bmVnZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3Qgdm5lZ2RfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92bmVnZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cGFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cGFkZHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZwYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cGFkZHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2cGFkZHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnBhZGRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnBhZGRxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZwYWRkcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnBhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZwYWRkcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZwYWRkcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZwYWRkcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cGFkZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cGFkZHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZwYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnBhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cGFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZwYWRkcV9zNjQoaW50NjR4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnBhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnBhZGRxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cGFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnBhZGRkX3U2NCh1aW50NjR4Ml90IF9fcDApIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cGFkZGRfdTY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZwYWRkZF91NjQodWludDY0eDJfdCBfX3AwKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnBhZGRkX3U2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZwYWRkZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBhZGRkX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnBhZGRkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBhZGRkX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cGFkZGRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwYWRkZF9zNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cGFkZGRfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnBhZGRkX3M2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZwYWRkc19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBhZGRzX2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cGFkZHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cGFkZHNfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnBtYXhxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnBtYXhxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cG1heHFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnBtYXhxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDUwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnBtYXhxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZwbWF4cV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnBtYXhxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZwbWF4cV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZwbWF4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZwbWF4cV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2cG1heHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cG1heHFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWF4cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZwbWF4cV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnBtYXhxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cG1heHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZwbWF4cV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkgX19idWlsdGluX25lb25fdnBtYXhxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnBtYXhxZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtYXhxZF9mNjQoKGludDh4MTZfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NF90IHZwbWF4cWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1heHFkX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZwbWF4c19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnBtYXhzX2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cG1heHNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1heHNfZjMyKChpbnQ4eDhfdClfX3JldjApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZwbWF4bm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtYXhubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cG1heG5tcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtYXhubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZwbWF4bm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhubXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2cG1heG5tcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtYXhubXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4Ml90IHZwbWF4bm1fZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnBtYXhubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnBtYXhubV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZwbWF4bm1xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtYXhubXFkX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnBtYXhubXFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnBtYXhubXFkX2Y2NCgoaW50OHgxNl90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZwbWF4bm1zX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tc19mMzIoKGludDh4OF90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnBtYXhubXNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1heG5tc19mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cG1pbnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cG1pbnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZwbWlucV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cG1pbnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cG1pbnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0OSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnBtaW5xX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cG1pbnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnBtaW5xX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnBtaW5xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnBtaW5xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJ4NF90IHZwbWlucV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZwbWlucV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX25lb25fdnBtaW5xX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnBtaW5xX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cG1pbnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZwbWlucV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnBtaW5xX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjRfdCB2cG1pbnFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnFkX2Y2NCgoaW50OHgxNl90KV9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnBtaW5xZF9mNjQoZmxvYXQ2NHgyX3QgX19wMCkgeworICBmbG9hdDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlucWRfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnBtaW5zX2YzMihmbG9hdDMyeDJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cG1pbnNfZjMyKChpbnQ4eDhfdClfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMl90IHZwbWluc19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWluc19mMzIoKGludDh4OF90KV9fcmV2MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnBtaW5ubXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZwbWlubm1xX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnBtaW5ubXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZwbWlubm1xX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnBtaW5ubV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1fdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDJfdCB2cG1pbm5tX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgOSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnBtaW5ubXFkX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tcWRfZjY0KChpbnQ4eDE2X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cG1pbm5tcWRfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cG1pbm5tcWRfZjY0KChpbnQ4eDE2X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyX3QgdnBtaW5ubXNfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1zX2YzMigoaW50OHg4X3QpX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cG1pbm5tc19mMzIoZmxvYXQzMngyX3QgX19wMCkgeworICBmbG9hdDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZwbWlubm1zX2YzMigoaW50OHg4X3QpX19yZXYwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFhYnNxX3M2NChpbnQ2NHgyX3QgX19wMCkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFhYnNxX3YoKGludDh4MTZfdClfX3AwLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWFic3FfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgxX3QgdnFhYnNfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cWFic192KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZxYWJzX3M2NChpbnQ2NHgxX3QgX19wMCkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnFhYnNfdigoaW50OHg4X3QpX19wMCwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZxYWJzYl9zOChpbnQ4X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFhYnNiX3M4KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4X3QgdnFhYnNiX3M4KGludDhfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cWFic2JfczgoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cWFic3NfczMyKGludDMyX3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWFic3NfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxYWJzc19zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzc19zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cWFic2RfczY0KGludDY0X3QgX19wMCkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWFic2RfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxYWJzZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cWFic2hfczE2KGludDE2X3QgX19wMCkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFic2hfczE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxYWJzaF9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWJzaF9zMTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2cWFkZGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFhZGRiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZxYWRkYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdnFhZGRzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFhZGRzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdnFhZGRzX3UzMih1aW50MzJfdCBfX3AwLCB1aW50MzJfdCBfX3AxKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFhZGRzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjRfdCB2cWFkZGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2cWFkZGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZxYWRkaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNl90IHZxYWRkaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkaF91MTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZxYWRkYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZxYWRkYl9zOChpbnQ4X3QgX19wMCwgaW50OF90IF9fcDEpIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxYWRkc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFhZGRzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cWFkZHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJfdCBfX25vc3dhcF92cWFkZHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cWFkZGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxYWRkZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFhZGRoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cWFkZGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxYWRkaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFhZGRoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNl90IF9fbm9zd2FwX3ZxYWRkaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFhZGRoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxZG1sYWxzX3MzMihpbnQ2NF90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxzX3MzMihfX3AwLCBfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cWRtbGFsc19zMzIoaW50NjRfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19zMzIoX19wMCwgX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cWRtbGFsaF9zMTYoaW50MzJfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsaF9zMTYoX19wMCwgX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFkbWxhbGhfczE2KGludDMyX3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxhbGhfczE2KF9fcDAsIF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtbGFsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZxZG1sYWxfczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIHZnZXRfaGlnaF9zMzIoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtbGFsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZxZG1sYWxfczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIHZnZXRfaGlnaF9zMTYoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbWxhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxhbF9zMzIoX19zMCwgdmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxhbF9zMTYoX19zMCwgdmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sYWxfczMyKF9fczAsIHZnZXRfaGlnaF9zMzIoX19zMSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxfaGlnaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxhbF9zMTYoX19zMCwgdmdldF9oaWdoX3MxNihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtbGFsX25fczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbWxhbF9oaWdoX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9uX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnFkbWxhbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtbGFsX25fczE2KF9fcDAsIHZnZXRfaGlnaF9zMTYoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbWxhbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxhbF9uX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsc19sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxzX2xhbmVfczMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxzX2xhbmVfczMyKF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsaF9sYW5lX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxoX2xhbmVfczE2KF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sYWxoX2xhbmVfczE2KF9fczAsIF9fczEsIChpbnQ4eDhfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsc19sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19sYW5lcV9zMzIoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxzX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsc19sYW5lcV9zMzIoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsaF9sYW5lcV9zMTYoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3MyLCBfX3AzKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbGFsaF9sYW5lcV9zMTYoX19zMCwgX19zMSwgKGludDh4MTZfdClfX3JldjIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbGFsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxhbF9zMzIoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxhbF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sYWxfczMyKF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxhbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG1sYWxfczE2KF9fczAsIF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG1sYWxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbGFsX3MxNihfX3JldjAsIF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFkbWxzbHNfczMyKGludDY0X3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbHNfczMyKF9fcDAsIF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxZG1sc2xzX3MzMihpbnQ2NF90IF9fcDAsIGludDMyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX3MzMihfX3AwLCBfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxZG1sc2xoX3MxNihpbnQzMl90IF9fcDAsIGludDE2X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xoX3MxNihfX3AwLCBfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cWRtbHNsaF9zMTYoaW50MzJfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtbHNsaF9zMTYoX19wMCwgX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG1sc2xfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbWxzbF9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgdmdldF9oaWdoX3MzMihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbHNsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG1sc2xfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbWxzbF9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgdmdldF9oaWdoX3MxNihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbHNsX3MzMihfX3MwLCB2Z2V0X2hpZ2hfczMyKF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbHNsX3MxNihfX3MwLCB2Z2V0X2hpZ2hfczE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxzbF9zMzIoX19zMCwgdmdldF9oaWdoX3MzMihfX3MxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MSksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbHNsX3MxNihfX3MwLCB2Z2V0X2hpZ2hfczE2KF9fczEpLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtbHNsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZxZG1sc2xfbl9zMzIoX19wMCwgdmdldF9oaWdoX3MzMihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtbHNsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX25fczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX2hpZ2hfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZxZG1sc2xfbl9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtbHNsX2hpZ2hfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtbHNsX25fczE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xzX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbHNfbGFuZV9zMzIoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbHNfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFkbWxzbHNfbGFuZV9zMzIoX19zMCwgX19zMSwgKGludDh4OF90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbGhfbGFuZV9zMTYoX19zMCwgX19zMSwgKGludDh4OF90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbGhfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbWxzbGhfbGFuZV9zMTYoX19zMCwgX19zMSwgKGludDh4OF90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xzX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX2xhbmVxX3MzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbHNfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xzX2xhbmVxX3MzMihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xoX2xhbmVxX3MxNihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fczIsIF9fcDMpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG1sc2xoX2xhbmVxX3MxNihfX3MwLCBfX3MxLCAoaW50OHgxNl90KV9fcmV2MiwgX19wMyk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG1sc2xfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtbHNsX3MzMihfX3MwLCBfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtbHNsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbWxzbF9zMzIoX19yZXYwLCBfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtbHNsX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19zMiA9IF9fcDI7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbWxzbF9zMTYoX19zMCwgX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbWxzbF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG1sc2xfczE2KF9fcmV2MCwgX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cWRtdWxoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxZG11bGhzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxoc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJfdCBfX25vc3dhcF92cWRtdWxoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbXVsaHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2X3QgdnFkbXVsaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cWRtdWxoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFkbXVsaGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2X3QgX19ub3N3YXBfdnFkbXVsaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGhoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxoc19sYW5lX3MzMihfX3AwXzE0NiwgX19wMV8xNDYsIF9fcDJfMTQ2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE0NiA9IF9fcDBfMTQ2OyBcCisgIGludDMyeDJfdCBfX3MxXzE0NiA9IF9fcDFfMTQ2OyBcCisgIGludDMyX3QgX19yZXRfMTQ2OyBcCisgIF9fcmV0XzE0NiA9IHZxZG11bGhzX3MzMihfX3MwXzE0NiwgdmdldF9sYW5lX3MzMihfX3MxXzE0NiwgX19wMl8xNDYpKTsgXAorICBfX3JldF8xNDY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxoc19sYW5lX3MzMihfX3AwXzE0NywgX19wMV8xNDcsIF9fcDJfMTQ3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE0NyA9IF9fcDBfMTQ3OyBcCisgIGludDMyeDJfdCBfX3MxXzE0NyA9IF9fcDFfMTQ3OyBcCisgIGludDMyeDJfdCBfX3JldjFfMTQ3OyAgX19yZXYxXzE0NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTQ3LCBfX3MxXzE0NywgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8xNDc7IFwKKyAgX19yZXRfMTQ3ID0gX19ub3N3YXBfdnFkbXVsaHNfczMyKF9fczBfMTQ3LCBfX25vc3dhcF92Z2V0X2xhbmVfczMyKF9fcmV2MV8xNDcsIF9fcDJfMTQ3KSk7IFwKKyAgX19yZXRfMTQ3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxoaF9sYW5lX3MxNihfX3AwXzE0OCwgX19wMV8xNDgsIF9fcDJfMTQ4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE0OCA9IF9fcDBfMTQ4OyBcCisgIGludDE2eDRfdCBfX3MxXzE0OCA9IF9fcDFfMTQ4OyBcCisgIGludDE2X3QgX19yZXRfMTQ4OyBcCisgIF9fcmV0XzE0OCA9IHZxZG11bGhoX3MxNihfX3MwXzE0OCwgdmdldF9sYW5lX3MxNihfX3MxXzE0OCwgX19wMl8xNDgpKTsgXAorICBfX3JldF8xNDg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxoaF9sYW5lX3MxNihfX3AwXzE0OSwgX19wMV8xNDksIF9fcDJfMTQ5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE0OSA9IF9fcDBfMTQ5OyBcCisgIGludDE2eDRfdCBfX3MxXzE0OSA9IF9fcDFfMTQ5OyBcCisgIGludDE2eDRfdCBfX3JldjFfMTQ5OyAgX19yZXYxXzE0OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTQ5LCBfX3MxXzE0OSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldF8xNDk7IFwKKyAgX19yZXRfMTQ5ID0gX19ub3N3YXBfdnFkbXVsaGhfczE2KF9fczBfMTQ5LCBfX25vc3dhcF92Z2V0X2xhbmVfczE2KF9fcmV2MV8xNDksIF9fcDJfMTQ5KSk7IFwKKyAgX19yZXRfMTQ5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxoc19sYW5lcV9zMzIoX19wMF8xNTAsIF9fcDFfMTUwLCBfX3AyXzE1MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNTAgPSBfX3AwXzE1MDsgXAorICBpbnQzMng0X3QgX19zMV8xNTAgPSBfX3AxXzE1MDsgXAorICBpbnQzMl90IF9fcmV0XzE1MDsgXAorICBfX3JldF8xNTAgPSB2cWRtdWxoc19zMzIoX19zMF8xNTAsIHZnZXRxX2xhbmVfczMyKF9fczFfMTUwLCBfX3AyXzE1MCkpOyBcCisgIF9fcmV0XzE1MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhzX2xhbmVxX3MzMihfX3AwXzE1MSwgX19wMV8xNTEsIF9fcDJfMTUxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE1MSA9IF9fcDBfMTUxOyBcCisgIGludDMyeDRfdCBfX3MxXzE1MSA9IF9fcDFfMTUxOyBcCisgIGludDMyeDRfdCBfX3JldjFfMTUxOyAgX19yZXYxXzE1MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTUxLCBfX3MxXzE1MSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8xNTE7IFwKKyAgX19yZXRfMTUxID0gX19ub3N3YXBfdnFkbXVsaHNfczMyKF9fczBfMTUxLCBfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjFfMTUxLCBfX3AyXzE1MSkpOyBcCisgIF9fcmV0XzE1MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaGhfbGFuZXFfczE2KF9fcDBfMTUyLCBfX3AxXzE1MiwgX19wMl8xNTIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTUyID0gX19wMF8xNTI7IFwKKyAgaW50MTZ4OF90IF9fczFfMTUyID0gX19wMV8xNTI7IFwKKyAgaW50MTZfdCBfX3JldF8xNTI7IFwKKyAgX19yZXRfMTUyID0gdnFkbXVsaGhfczE2KF9fczBfMTUyLCB2Z2V0cV9sYW5lX3MxNihfX3MxXzE1MiwgX19wMl8xNTIpKTsgXAorICBfX3JldF8xNTI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxoaF9sYW5lcV9zMTYoX19wMF8xNTMsIF9fcDFfMTUzLCBfX3AyXzE1MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNTMgPSBfX3AwXzE1MzsgXAorICBpbnQxNng4X3QgX19zMV8xNTMgPSBfX3AxXzE1MzsgXAorICBpbnQxNng4X3QgX19yZXYxXzE1MzsgIF9fcmV2MV8xNTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE1MywgX19zMV8xNTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXRfMTUzOyBcCisgIF9fcmV0XzE1MyA9IF9fbm9zd2FwX3ZxZG11bGhoX3MxNihfX3MwXzE1MywgX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19yZXYxXzE1MywgX19wMl8xNTMpKTsgXAorICBfX3JldF8xNTM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhxX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxocV9zMzIoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaHFfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxocV9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaHFfczE2KF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGhfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGhfczMyKF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGhfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsaF9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsaF9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxoX3MxNihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxZG11bGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFkbXVsbHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxZG11bGxzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NF90IF9fbm9zd2FwX3ZxZG11bGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cWRtdWxsaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxZG11bGxoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cWRtdWxsaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJfdCBfX25vc3dhcF92cWRtdWxsaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFkbXVsbGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbXVsbF9zMzIodmdldF9oaWdoX3MzMihfX3AwKSwgdmdldF9oaWdoX3MzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2cWRtdWxsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczMyKF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdnFkbXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3AwKSwgdmdldF9oaWdoX3MxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cWRtdWxsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczE2KF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYwKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxfaGlnaF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cWRtdWxsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFkbXVsbF9zMTYodmdldF9oaWdoX3MxNihfX3MwKSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MzMih2Z2V0X2hpZ2hfczMyKF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMzIoX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbF9oaWdoX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MxNih2Z2V0X2hpZ2hfczE2KF9fczApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2hpZ2hfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZxZG11bGxfaGlnaF9uX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtdWxsX25fczMyKHZnZXRfaGlnaF9zMzIoX19wMCksIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnFkbXVsbF9oaWdoX25fczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9uX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fcDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZxZG11bGxfaGlnaF9uX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2cWRtdWxsX25fczE2KHZnZXRfaGlnaF9zMTYoX19wMCksIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFkbXVsbF9oaWdoX25fczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9uX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MCksIF9fcDEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbHNfbGFuZV9zMzIoX19wMF8xNTQsIF9fcDFfMTU0LCBfX3AyXzE1NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNTQgPSBfX3AwXzE1NDsgXAorICBpbnQzMngyX3QgX19zMV8xNTQgPSBfX3AxXzE1NDsgXAorICBpbnQ2NF90IF9fcmV0XzE1NDsgXAorICBfX3JldF8xNTQgPSB2cWRtdWxsc19zMzIoX19zMF8xNTQsIHZnZXRfbGFuZV9zMzIoX19zMV8xNTQsIF9fcDJfMTU0KSk7IFwKKyAgX19yZXRfMTU0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbHNfbGFuZV9zMzIoX19wMF8xNTUsIF9fcDFfMTU1LCBfX3AyXzE1NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNTUgPSBfX3AwXzE1NTsgXAorICBpbnQzMngyX3QgX19zMV8xNTUgPSBfX3AxXzE1NTsgXAorICBpbnQzMngyX3QgX19yZXYxXzE1NTsgIF9fcmV2MV8xNTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE1NSwgX19zMV8xNTUsIDEsIDApOyBcCisgIGludDY0X3QgX19yZXRfMTU1OyBcCisgIF9fcmV0XzE1NSA9IF9fbm9zd2FwX3ZxZG11bGxzX3MzMihfX3MwXzE1NSwgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjFfMTU1LCBfX3AyXzE1NSkpOyBcCisgIF9fcmV0XzE1NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbGhfbGFuZV9zMTYoX19wMF8xNTYsIF9fcDFfMTU2LCBfX3AyXzE1NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNTYgPSBfX3AwXzE1NjsgXAorICBpbnQxNng0X3QgX19zMV8xNTYgPSBfX3AxXzE1NjsgXAorICBpbnQzMl90IF9fcmV0XzE1NjsgXAorICBfX3JldF8xNTYgPSB2cWRtdWxsaF9zMTYoX19zMF8xNTYsIHZnZXRfbGFuZV9zMTYoX19zMV8xNTYsIF9fcDJfMTU2KSk7IFwKKyAgX19yZXRfMTU2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbGhfbGFuZV9zMTYoX19wMF8xNTcsIF9fcDFfMTU3LCBfX3AyXzE1NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNTcgPSBfX3AwXzE1NzsgXAorICBpbnQxNng0X3QgX19zMV8xNTcgPSBfX3AxXzE1NzsgXAorICBpbnQxNng0X3QgX19yZXYxXzE1NzsgIF9fcmV2MV8xNTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE1NywgX19zMV8xNTcsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMTU3OyBcCisgIF9fcmV0XzE1NyA9IF9fbm9zd2FwX3ZxZG11bGxoX3MxNihfX3MwXzE1NywgX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3JldjFfMTU3LCBfX3AyXzE1NykpOyBcCisgIF9fcmV0XzE1NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFkbXVsbHNfbGFuZXFfczMyKF9fcDBfMTU4LCBfX3AxXzE1OCwgX19wMl8xNTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTU4ID0gX19wMF8xNTg7IFwKKyAgaW50MzJ4NF90IF9fczFfMTU4ID0gX19wMV8xNTg7IFwKKyAgaW50NjRfdCBfX3JldF8xNTg7IFwKKyAgX19yZXRfMTU4ID0gdnFkbXVsbHNfczMyKF9fczBfMTU4LCB2Z2V0cV9sYW5lX3MzMihfX3MxXzE1OCwgX19wMl8xNTgpKTsgXAorICBfX3JldF8xNTg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsc19sYW5lcV9zMzIoX19wMF8xNTksIF9fcDFfMTU5LCBfX3AyXzE1OSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNTkgPSBfX3AwXzE1OTsgXAorICBpbnQzMng0X3QgX19zMV8xNTkgPSBfX3AxXzE1OTsgXAorICBpbnQzMng0X3QgX19yZXYxXzE1OTsgIF9fcmV2MV8xNTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE1OSwgX19zMV8xNTksIDMsIDIsIDEsIDApOyBcCisgIGludDY0X3QgX19yZXRfMTU5OyBcCisgIF9fcmV0XzE1OSA9IF9fbm9zd2FwX3ZxZG11bGxzX3MzMihfX3MwXzE1OSwgX19ub3N3YXBfdmdldHFfbGFuZV9zMzIoX19yZXYxXzE1OSwgX19wMl8xNTkpKTsgXAorICBfX3JldF8xNTk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxoX2xhbmVxX3MxNihfX3AwXzE2MCwgX19wMV8xNjAsIF9fcDJfMTYwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE2MCA9IF9fcDBfMTYwOyBcCisgIGludDE2eDhfdCBfX3MxXzE2MCA9IF9fcDFfMTYwOyBcCisgIGludDMyX3QgX19yZXRfMTYwOyBcCisgIF9fcmV0XzE2MCA9IHZxZG11bGxoX3MxNihfX3MwXzE2MCwgdmdldHFfbGFuZV9zMTYoX19zMV8xNjAsIF9fcDJfMTYwKSk7IFwKKyAgX19yZXRfMTYwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFkbXVsbGhfbGFuZXFfczE2KF9fcDBfMTYxLCBfX3AxXzE2MSwgX19wMl8xNjEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTYxID0gX19wMF8xNjE7IFwKKyAgaW50MTZ4OF90IF9fczFfMTYxID0gX19wMV8xNjE7IFwKKyAgaW50MTZ4OF90IF9fcmV2MV8xNjE7ICBfX3JldjFfMTYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNjEsIF9fczFfMTYxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzE2MTsgXAorICBfX3JldF8xNjEgPSBfX25vc3dhcF92cWRtdWxsaF9zMTYoX19zMF8xNjEsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2MV8xNjEsIF9fcDJfMTYxKSk7IFwKKyAgX19yZXRfMTYxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cWRtdWxsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSB2cWRtdWxsX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cWRtdWxsX2xhbmVxX3MzMihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxZG11bGxfczMyKF9fcmV2MCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYxLCBfX3JldjEsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxZG11bGxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxZG11bGxfczE2KF9fczAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIF9fcDIsIF9fcDIsIF9fcDIsIF9fcDIpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxZG11bGxfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFkbXVsbF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cW1vdm5zX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFtb3Zuc19zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFtb3Zuc19zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bnNfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFtb3ZuZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmRfczY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxbW92bmRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5kX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnFtb3ZuaF9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW1vdm5oX3MxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZxbW92bmhfczE2KGludDE2X3QgX19wMCkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuaF9zMTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2X3QgdnFtb3Zuc191MzIodWludDMyX3QgX19wMCkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bnNfdTMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2cW1vdm5zX3UzMih1aW50MzJfdCBfX3AwKSB7CisgIHVpbnQxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFtb3Zuc191MzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyX3QgdnFtb3ZuZF91NjQodWludDY0X3QgX19wMCkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmRfdTY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJfdCB2cW1vdm5kX3U2NCh1aW50NjRfdCBfX3AwKSB7CisgIHVpbnQzMl90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJfdCkgX19idWlsdGluX25lb25fdnFtb3ZuZF91NjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2cW1vdm5oX3UxNih1aW50MTZfdCBfX3AwKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92bmhfdTE2KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OF90IHZxbW92bmhfdTE2KHVpbnQxNl90IF9fcDApIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFtb3ZuaF91MTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2cW1vdm5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MTYoX19wMCwgdnFtb3ZuX3UzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnFtb3ZuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdnFtb3ZuX3UzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnFtb3ZuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTMyKF9fcDAsIHZxbW92bl91NjQoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZxbW92bl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl91NjQoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxbW92bl9oaWdoX3UxNih1aW50OHg4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTgoX19wMCwgdnFtb3ZuX3UxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnFtb3ZuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3U4KF9fcmV2MCwgX19ub3N3YXBfdnFtb3ZuX3UxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2cW1vdm5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdnFtb3ZuX3MzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2cW1vdm5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdnFtb3ZuX3MzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cW1vdm5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMzIoX19wMCwgdnFtb3ZuX3M2NChfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cW1vdm5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdnFtb3ZuX3M2NChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cW1vdm5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZxbW92bl9zMTYoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnFtb3ZuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zOChfX3JldjAsIF9fbm9zd2FwX3ZxbW92bl9zMTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxbW92dW5zX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bnNfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxbW92dW5zX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFtb3Z1bnNfczMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFtb3Z1bmRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFtb3Z1bmRfczY0KGludDY0X3QgX19wMCkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cW1vdnVuZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OF90IHZxbW92dW5oX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5oX3MxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZxbW92dW5oX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbW92dW5oX3MxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnFtb3Z1bl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19wMCksIHZxbW92dW5fczMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZxbW92dW5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3JldjApLCBfX25vc3dhcF92cW1vdnVuX3MzMihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cW1vdnVuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3AwKSwgdnFtb3Z1bl9zNjQoX19wMSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnFtb3Z1bl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fcmV2MCksIF9fbm9zd2FwX3ZxbW92dW5fczY0KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxbW92dW5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fcDApLCB2cW1vdnVuX3MxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cW1vdnVuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OCgodWludDh4OF90KShfX3JldjApLCBfX25vc3dhcF92cW1vdnVuX3MxNihfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2cW5lZ3FfczY0KGludDY0eDJfdCBfX3AwKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ3FfdigoaW50OHgxNl90KV9fcDAsIDM1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZxbmVncV9zNjQoaW50NjR4Ml90IF9fcDApIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnFuZWdxX3YoKGludDh4MTZfdClfX3JldjAsIDM1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2cW5lZ19zNjQoaW50NjR4MV90IF9fcDApIHsKKyAgaW50NjR4MV90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnX3YoKGludDh4OF90KV9fcDAsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgxX3QgdnFuZWdfczY0KGludDY0eDFfdCBfX3AwKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ192KChpbnQ4eDhfdClfX3AwLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4X3QgdnFuZWdiX3M4KGludDhfdCBfX3AwKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cW5lZ2JfczgoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2cW5lZ2JfczgoaW50OF90IF9fcDApIHsKKyAgaW50OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnYl9zOChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxbmVnc19zMzIoaW50MzJfdCBfX3AwKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnc19zMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFuZWdzX3MzMihpbnQzMl90IF9fcDApIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFuZWdzX3MzMihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZxbmVnZF9zNjQoaW50NjRfdCBfX3AwKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnZF9zNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnFuZWdkX3M2NChpbnQ2NF90IF9fcDApIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFuZWdkX3M2NChfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxbmVnaF9zMTYoaW50MTZfdCBfX3AwKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxbmVnaF9zMTYoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFuZWdoX3MxNihpbnQxNl90IF9fcDApIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFuZWdoX3MxNihfX3AwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMl90IHZxcmRtdWxoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyZG11bGhzX3MzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJfdCB2cXJkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJfdCBfX25vc3dhcF92cXJkbXVsaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cXJkbXVsaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcmRtdWxoaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2X3QgdnFyZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2X3QgX19ub3N3YXBfdnFyZG11bGhoX3MxNihpbnQxNl90IF9fcDAsIGludDE2X3QgX19wMSkgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJkbXVsaGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxoc19sYW5lX3MzMihfX3AwXzE2MiwgX19wMV8xNjIsIF9fcDJfMTYyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE2MiA9IF9fcDBfMTYyOyBcCisgIGludDMyeDJfdCBfX3MxXzE2MiA9IF9fcDFfMTYyOyBcCisgIGludDMyX3QgX19yZXRfMTYyOyBcCisgIF9fcmV0XzE2MiA9IHZxcmRtdWxoc19zMzIoX19zMF8xNjIsIHZnZXRfbGFuZV9zMzIoX19zMV8xNjIsIF9fcDJfMTYyKSk7IFwKKyAgX19yZXRfMTYyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhzX2xhbmVfczMyKF9fcDBfMTYzLCBfX3AxXzE2MywgX19wMl8xNjMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMTYzID0gX19wMF8xNjM7IFwKKyAgaW50MzJ4Ml90IF9fczFfMTYzID0gX19wMV8xNjM7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MV8xNjM7ICBfX3JldjFfMTYzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNjMsIF9fczFfMTYzLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzE2MzsgXAorICBfX3JldF8xNjMgPSBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fczBfMTYzLCBfX25vc3dhcF92Z2V0X2xhbmVfczMyKF9fcmV2MV8xNjMsIF9fcDJfMTYzKSk7IFwKKyAgX19yZXRfMTYzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaGhfbGFuZV9zMTYoX19wMF8xNjQsIF9fcDFfMTY0LCBfX3AyXzE2NCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8xNjQgPSBfX3AwXzE2NDsgXAorICBpbnQxNng0X3QgX19zMV8xNjQgPSBfX3AxXzE2NDsgXAorICBpbnQxNl90IF9fcmV0XzE2NDsgXAorICBfX3JldF8xNjQgPSB2cXJkbXVsaGhfczE2KF9fczBfMTY0LCB2Z2V0X2xhbmVfczE2KF9fczFfMTY0LCBfX3AyXzE2NCkpOyBcCisgIF9fcmV0XzE2NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxoaF9sYW5lX3MxNihfX3AwXzE2NSwgX19wMV8xNjUsIF9fcDJfMTY1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE2NSA9IF9fcDBfMTY1OyBcCisgIGludDE2eDRfdCBfX3MxXzE2NSA9IF9fcDFfMTY1OyBcCisgIGludDE2eDRfdCBfX3JldjFfMTY1OyAgX19yZXYxXzE2NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTY1LCBfX3MxXzE2NSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldF8xNjU7IFwKKyAgX19yZXRfMTY1ID0gX19ub3N3YXBfdnFyZG11bGhoX3MxNihfX3MwXzE2NSwgX19ub3N3YXBfdmdldF9sYW5lX3MxNihfX3JldjFfMTY1LCBfX3AyXzE2NSkpOyBcCisgIF9fcmV0XzE2NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhzX2xhbmVxX3MzMihfX3AwXzE2NiwgX19wMV8xNjYsIF9fcDJfMTY2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzE2NiA9IF9fcDBfMTY2OyBcCisgIGludDMyeDRfdCBfX3MxXzE2NiA9IF9fcDFfMTY2OyBcCisgIGludDMyX3QgX19yZXRfMTY2OyBcCisgIF9fcmV0XzE2NiA9IHZxcmRtdWxoc19zMzIoX19zMF8xNjYsIHZnZXRxX2xhbmVfczMyKF9fczFfMTY2LCBfX3AyXzE2NikpOyBcCisgIF9fcmV0XzE2NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcmRtdWxoc19sYW5lcV9zMzIoX19wMF8xNjcsIF9fcDFfMTY3LCBfX3AyXzE2NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8xNjcgPSBfX3AwXzE2NzsgXAorICBpbnQzMng0X3QgX19zMV8xNjcgPSBfX3AxXzE2NzsgXAorICBpbnQzMng0X3QgX19yZXYxXzE2NzsgIF9fcmV2MV8xNjcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE2NywgX19zMV8xNjcsIDMsIDIsIDEsIDApOyBcCisgIGludDMyX3QgX19yZXRfMTY3OyBcCisgIF9fcmV0XzE2NyA9IF9fbm9zd2FwX3ZxcmRtdWxoc19zMzIoX19zMF8xNjcsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczMyKF9fcmV2MV8xNjcsIF9fcDJfMTY3KSk7IFwKKyAgX19yZXRfMTY3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaGhfbGFuZXFfczE2KF9fcDBfMTY4LCBfX3AxXzE2OCwgX19wMl8xNjgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMTY4ID0gX19wMF8xNjg7IFwKKyAgaW50MTZ4OF90IF9fczFfMTY4ID0gX19wMV8xNjg7IFwKKyAgaW50MTZfdCBfX3JldF8xNjg7IFwKKyAgX19yZXRfMTY4ID0gdnFyZG11bGhoX3MxNihfX3MwXzE2OCwgdmdldHFfbGFuZV9zMTYoX19zMV8xNjgsIF9fcDJfMTY4KSk7IFwKKyAgX19yZXRfMTY4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhoX2xhbmVxX3MxNihfX3AwXzE2OSwgX19wMV8xNjksIF9fcDJfMTY5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzE2OSA9IF9fcDBfMTY5OyBcCisgIGludDE2eDhfdCBfX3MxXzE2OSA9IF9fcDFfMTY5OyBcCisgIGludDE2eDhfdCBfX3JldjFfMTY5OyAgX19yZXYxXzE2OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTY5LCBfX3MxXzE2OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZfdCBfX3JldF8xNjk7IFwKKyAgX19yZXRfMTY5ID0gX19ub3N3YXBfdnFyZG11bGhoX3MxNihfX3MwXzE2OSwgX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoX19yZXYxXzE2OSwgX19wMl8xNjkpKTsgXAorICBfX3JldF8xNjk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtdWxocV9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gdnFyZG11bGhxX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaHFfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19ub3N3YXBfdnFyZG11bGhxX3MzMihfX3JldjAsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MSwgX19yZXYxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbXVsaHFfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxocV9zMTYoX19zMCwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG11bGhxX2xhbmVxX3MxNihfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczAgPSBfX3AwOyBcCisgIGludDE2eDhfdCBfX3MxID0gX19wMTsgXAorICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldDsgXAorICBfX3JldCA9IF9fbm9zd2FwX3ZxcmRtdWxocV9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhfbGFuZXFfczMyKF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxoX3MzMihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaF9sYW5lcV9zMzIoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaF9zMzIoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG11bGhfbGFuZXFfczE2KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4OF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3JldDsgXAorICBfX3JldCA9IHZxcmRtdWxoX3MxNihfX3MwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCBfX3AyLCBfX3AyLCBfX3AyLCBfX3AyKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbXVsaF9sYW5lcV9zMTYoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng4X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX25vc3dhcF92cXJkbXVsaF9zMTYoX19yZXYwLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjEsIF9fcmV2MSwgX19wMiwgX19wMiwgX19wMiwgX19wMikpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2cXJzaGxiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3QgdnFyc2hsYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZxcnNobHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdnFyc2hsc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobHNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZxcnNobGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnFyc2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZxcnNobGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdnFyc2hsaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2cXJzaGxiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hsYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZxcnNobGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnFyc2hsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hsc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFyc2hsc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hsc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2cXJzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cXJzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaGxkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxcnNobGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxcnNobGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNobGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3UzMihfX3AwXzE3MCwgX19wMV8xNzAsIF9fcDJfMTcwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzE3MCA9IF9fcDBfMTcwOyBcCisgIHVpbnQzMng0X3QgX19zMV8xNzAgPSBfX3AxXzE3MDsgXAorICB1aW50MTZ4OF90IF9fcmV0XzE3MDsgXAorICBfX3JldF8xNzAgPSAodWludDE2eDhfdCkodmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3MwXzE3MCksICh1aW50MTZ4NF90KSh2cXJzaHJuX25fdTMyKF9fczFfMTcwLCBfX3AyXzE3MCkpKSk7IFwKKyAgX19yZXRfMTcwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTMyKF9fcDBfMTcxLCBfX3AxXzE3MSwgX19wMl8xNzEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMTcxID0gX19wMF8xNzE7IFwKKyAgdWludDMyeDRfdCBfX3MxXzE3MSA9IF9fcDFfMTcxOyBcCisgIHVpbnQxNng0X3QgX19yZXYwXzE3MTsgIF9fcmV2MF8xNzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE3MSwgX19zMF8xNzEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxXzE3MTsgIF9fcmV2MV8xNzEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE3MSwgX19zMV8xNzEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMTcxOyBcCisgIF9fcmV0XzE3MSA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fcmV2MF8xNzEpLCAodWludDE2eDRfdCkoX19ub3N3YXBfdnFyc2hybl9uX3UzMihfX3JldjFfMTcxLCBfX3AyXzE3MSkpKSk7IFwKKyAgX19yZXRfMTcxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTcxLCBfX3JldF8xNzEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE3MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTY0KF9fcDBfMTcyLCBfX3AxXzE3MiwgX19wMl8xNzIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Ml90IF9fczBfMTcyID0gX19wMF8xNzI7IFwKKyAgdWludDY0eDJfdCBfX3MxXzE3MiA9IF9fcDFfMTcyOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMTcyOyBcCisgIF9fcmV0XzE3MiA9ICh1aW50MzJ4NF90KSh2Y29tYmluZV91MzIoKHVpbnQzMngyX3QpKF9fczBfMTcyKSwgKHVpbnQzMngyX3QpKHZxcnNocm5fbl91NjQoX19zMV8xNzIsIF9fcDJfMTcyKSkpKTsgXAorICBfX3JldF8xNzI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl91NjQoX19wMF8xNzMsIF9fcDFfMTczLCBfX3AyXzE3MykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8xNzMgPSBfX3AwXzE3MzsgXAorICB1aW50NjR4Ml90IF9fczFfMTczID0gX19wMV8xNzM7IFwKKyAgdWludDMyeDJfdCBfX3JldjBfMTczOyAgX19yZXYwXzE3MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTczLCBfX3MwXzE3MywgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjFfMTczOyAgX19yZXYxXzE3MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTczLCBfX3MxXzE3MywgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldF8xNzM7IFwKKyAgX19yZXRfMTczID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19yZXYwXzE3MyksICh1aW50MzJ4Ml90KShfX25vc3dhcF92cXJzaHJuX25fdTY0KF9fcmV2MV8xNzMsIF9fcDJfMTczKSkpKTsgXAorICBfX3JldF8xNzMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xNzMsIF9fcmV0XzE3MywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTczOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl91MTYoX19wMF8xNzQsIF9fcDFfMTc0LCBfX3AyXzE3NCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzE3NCA9IF9fcDBfMTc0OyBcCisgIHVpbnQxNng4X3QgX19zMV8xNzQgPSBfX3AxXzE3NDsgXAorICB1aW50OHgxNl90IF9fcmV0XzE3NDsgXAorICBfX3JldF8xNzQgPSAodWludDh4MTZfdCkodmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19zMF8xNzQpLCAodWludDh4OF90KSh2cXJzaHJuX25fdTE2KF9fczFfMTc0LCBfX3AyXzE3NCkpKSk7IFwKKyAgX19yZXRfMTc0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTE2KF9fcDBfMTc1LCBfX3AxXzE3NSwgX19wMl8xNzUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4X3QgX19zMF8xNzUgPSBfX3AwXzE3NTsgXAorICB1aW50MTZ4OF90IF9fczFfMTc1ID0gX19wMV8xNzU7IFwKKyAgdWludDh4OF90IF9fcmV2MF8xNzU7ICBfX3JldjBfMTc1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xNzUsIF9fczBfMTc1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4OF90IF9fcmV2MV8xNzU7ICBfX3JldjFfMTc1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xNzUsIF9fczFfMTc1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICB1aW50OHgxNl90IF9fcmV0XzE3NTsgXAorICBfX3JldF8xNzUgPSAodWludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19yZXYwXzE3NSksICh1aW50OHg4X3QpKF9fbm9zd2FwX3ZxcnNocm5fbl91MTYoX19yZXYxXzE3NSwgX19wMl8xNzUpKSkpOyBcCisgIF9fcmV0XzE3NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE3NSwgX19yZXRfMTc1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNzU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3MzMihfX3AwXzE3NiwgX19wMV8xNzYsIF9fcDJfMTc2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMTc2ID0gX19wMF8xNzY7IFwKKyAgaW50MzJ4NF90IF9fczFfMTc2ID0gX19wMV8xNzY7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzE3NjsgXAorICBfX3JldF8xNzYgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8xNzYpLCAoaW50MTZ4NF90KSh2cXJzaHJuX25fczMyKF9fczFfMTc2LCBfX3AyXzE3NikpKSk7IFwKKyAgX19yZXRfMTc2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fczMyKF9fcDBfMTc3LCBfX3AxXzE3NywgX19wMl8xNzcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8xNzcgPSBfX3AwXzE3NzsgXAorICBpbnQzMng0X3QgX19zMV8xNzcgPSBfX3AxXzE3NzsgXAorICBpbnQxNng0X3QgX19yZXYwXzE3NzsgIF9fcmV2MF8xNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE3NywgX19zMF8xNzcsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjFfMTc3OyAgX19yZXYxXzE3NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTc3LCBfX3MxXzE3NywgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzE3NzsgXAorICBfX3JldF8xNzcgPSAoaW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19yZXYwXzE3NyksIChpbnQxNng0X3QpKF9fbm9zd2FwX3ZxcnNocm5fbl9zMzIoX19yZXYxXzE3NywgX19wMl8xNzcpKSkpOyBcCisgIF9fcmV0XzE3NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE3NywgX19yZXRfMTc3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNzc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3M2NChfX3AwXzE3OCwgX19wMV8xNzgsIF9fcDJfMTc4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMTc4ID0gX19wMF8xNzg7IFwKKyAgaW50NjR4Ml90IF9fczFfMTc4ID0gX19wMV8xNzg7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzE3ODsgXAorICBfX3JldF8xNzggPSAoaW50MzJ4NF90KSh2Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19zMF8xNzgpLCAoaW50MzJ4Ml90KSh2cXJzaHJuX25fczY0KF9fczFfMTc4LCBfX3AyXzE3OCkpKSk7IFwKKyAgX19yZXRfMTc4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fczY0KF9fcDBfMTc5LCBfX3AxXzE3OSwgX19wMl8xNzkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8xNzkgPSBfX3AwXzE3OTsgXAorICBpbnQ2NHgyX3QgX19zMV8xNzkgPSBfX3AxXzE3OTsgXAorICBpbnQzMngyX3QgX19yZXYwXzE3OTsgIF9fcmV2MF8xNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE3OSwgX19zMF8xNzksIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjFfMTc5OyAgX19yZXYxXzE3OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTc5LCBfX3MxXzE3OSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzE3OTsgXAorICBfX3JldF8xNzkgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzE3OSksIChpbnQzMngyX3QpKF9fbm9zd2FwX3ZxcnNocm5fbl9zNjQoX19yZXYxXzE3OSwgX19wMl8xNzkpKSkpOyBcCisgIF9fcmV0XzE3OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE3OSwgX19yZXRfMTc5LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xNzk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3MxNihfX3AwXzE4MCwgX19wMV8xODAsIF9fcDJfMTgwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8xODAgPSBfX3AwXzE4MDsgXAorICBpbnQxNng4X3QgX19zMV8xODAgPSBfX3AxXzE4MDsgXAorICBpbnQ4eDE2X3QgX19yZXRfMTgwOyBcCisgIF9fcmV0XzE4MCA9IChpbnQ4eDE2X3QpKHZjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19zMF8xODApLCAoaW50OHg4X3QpKHZxcnNocm5fbl9zMTYoX19zMV8xODAsIF9fcDJfMTgwKSkpKTsgXAorICBfX3JldF8xODA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zMTYoX19wMF8xODEsIF9fcDFfMTgxLCBfX3AyXzE4MSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMTgxID0gX19wMF8xODE7IFwKKyAgaW50MTZ4OF90IF9fczFfMTgxID0gX19wMV8xODE7IFwKKyAgaW50OHg4X3QgX19yZXYwXzE4MTsgIF9fcmV2MF8xODEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE4MSwgX19zMF8xODEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjFfMTgxOyAgX19yZXYxXzE4MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTgxLCBfX3MxXzE4MSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0XzE4MTsgXAorICBfX3JldF8xODEgPSAoaW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fcmV2MF8xODEpLCAoaW50OHg4X3QpKF9fbm9zd2FwX3ZxcnNocm5fbl9zMTYoX19yZXYxXzE4MSwgX19wMl8xODEpKSkpOyBcCisgIF9fcmV0XzE4MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE4MSwgX19yZXRfMTgxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xODE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5zX25fdTMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hybnNfbl91MzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuc19uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5zX25fdTMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5kX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hybmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybmhfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFyc2hybmhfbl91MTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuaF9uX3UxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuaF9uX3UxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hybnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFyc2hybnNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocm5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFyc2hybmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5kX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocm5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocm5oX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczMyKF9fcDBfMTgyLCBfX3AxXzE4MiwgX19wMl8xODIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8xODIgPSBfX3AwXzE4MjsgXAorICBpbnQzMng0X3QgX19zMV8xODIgPSBfX3AxXzE4MjsgXAorICBpbnQxNng4X3QgX19yZXRfMTgyOyBcCisgIF9fcmV0XzE4MiA9IChpbnQxNng4X3QpKHZjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3MwXzE4MiksIChpbnQxNng0X3QpKHZxcnNocnVuX25fczMyKF9fczFfMTgyLCBfX3AyXzE4MikpKSk7IFwKKyAgX19yZXRfMTgyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyc2hydW5faGlnaF9uX3MzMihfX3AwXzE4MywgX19wMV8xODMsIF9fcDJfMTgzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMTgzID0gX19wMF8xODM7IFwKKyAgaW50MzJ4NF90IF9fczFfMTgzID0gX19wMV8xODM7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF8xODM7ICBfX3JldjBfMTgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xODMsIF9fczBfMTgzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxXzE4MzsgIF9fcmV2MV8xODMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE4MywgX19zMV8xODMsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF8xODM7IFwKKyAgX19yZXRfMTgzID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8xODMpLCAoaW50MTZ4NF90KShfX25vc3dhcF92cXJzaHJ1bl9uX3MzMihfX3JldjFfMTgzLCBfX3AyXzE4MykpKSk7IFwKKyAgX19yZXRfMTgzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTgzLCBfX3JldF8xODMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE4MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5faGlnaF9uX3M2NChfX3AwXzE4NCwgX19wMV8xODQsIF9fcDJfMTg0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMTg0ID0gX19wMF8xODQ7IFwKKyAgaW50NjR4Ml90IF9fczFfMTg0ID0gX19wMV8xODQ7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzE4NDsgXAorICBfX3JldF8xODQgPSAoaW50MzJ4NF90KSh2Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19zMF8xODQpLCAoaW50MzJ4Ml90KSh2cXJzaHJ1bl9uX3M2NChfX3MxXzE4NCwgX19wMl8xODQpKSkpOyBcCisgIF9fcmV0XzE4NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zNjQoX19wMF8xODUsIF9fcDFfMTg1LCBfX3AyXzE4NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzE4NSA9IF9fcDBfMTg1OyBcCisgIGludDY0eDJfdCBfX3MxXzE4NSA9IF9fcDFfMTg1OyBcCisgIGludDMyeDJfdCBfX3JldjBfMTg1OyAgX19yZXYwXzE4NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTg1LCBfX3MwXzE4NSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MV8xODU7ICBfX3JldjFfMTg1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xODUsIF9fczFfMTg1LCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXRfMTg1OyBcCisgIF9fcmV0XzE4NSA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3JldjBfMTg1KSwgKGludDMyeDJfdCkoX19ub3N3YXBfdnFyc2hydW5fbl9zNjQoX19yZXYxXzE4NSwgX19wMl8xODUpKSkpOyBcCisgIF9fcmV0XzE4NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE4NSwgX19yZXRfMTg1LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xODU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zMTYoX19wMF8xODYsIF9fcDFfMTg2LCBfX3AyXzE4NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMTg2ID0gX19wMF8xODY7IFwKKyAgaW50MTZ4OF90IF9fczFfMTg2ID0gX19wMV8xODY7IFwKKyAgaW50OHgxNl90IF9fcmV0XzE4NjsgXAorICBfX3JldF8xODYgPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMTg2KSwgKGludDh4OF90KSh2cXJzaHJ1bl9uX3MxNihfX3MxXzE4NiwgX19wMl8xODYpKSkpOyBcCisgIF9fcmV0XzE4NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zMTYoX19wMF8xODcsIF9fcDFfMTg3LCBfX3AyXzE4NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMTg3ID0gX19wMF8xODc7IFwKKyAgaW50MTZ4OF90IF9fczFfMTg3ID0gX19wMV8xODc7IFwKKyAgaW50OHg4X3QgX19yZXYwXzE4NzsgIF9fcmV2MF8xODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE4NywgX19zMF8xODcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldjFfMTg3OyAgX19yZXYxXzE4NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTg3LCBfX3MxXzE4NywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50OHgxNl90IF9fcmV0XzE4NzsgXAorICBfX3JldF8xODcgPSAoaW50OHgxNl90KShfX25vc3dhcF92Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fcmV2MF8xODcpLCAoaW50OHg4X3QpKF9fbm9zd2FwX3ZxcnNocnVuX25fczE2KF9fcmV2MV8xODcsIF9fcDJfMTg3KSkpKTsgXAorICBfX3JldF8xODcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xODcsIF9fcmV0XzE4NywgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTg3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJzaHJ1bnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bnNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJzaHJ1bnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bnNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcnNocnVuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocnVuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyc2hydW5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxcnNocnVuaF9uX3MxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxcnNocnVuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXJzaHJ1bmhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdnFzaGxiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2cXNobGJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZxc2hsc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsc191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZxc2hsc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsc191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnFzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnFzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2cXNobGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2cXNobGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2cXNobGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2cXNobGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cXNobHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFzaGxzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxc2hsaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cXNobGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxiX25fdTgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDhfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobGJfbl91OChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsYl9uX3U4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX25fdTgoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsc19uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsc19uX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsc19uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsc19uX3UzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFzaGxkX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobGhfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfbl91MTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobGhfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobGhfbl91MTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsYl9uX3M4KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaGxiX25fczgoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobGJfbl9zOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OF90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsYl9uX3M4KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hsZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaGxoX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGxoX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaGxoX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNobHViX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHViX25fczgoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNobHViX25fczgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDhfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHViX25fczgoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdXNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVzX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1c19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdXNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdWRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1ZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdWRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hsdWhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNobHVoX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaGx1aF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hsdWhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9oaWdoX25fdTMyKF9fcDBfMTg4LCBfX3AxXzE4OCwgX19wMl8xODgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMTg4ID0gX19wMF8xODg7IFwKKyAgdWludDMyeDRfdCBfX3MxXzE4OCA9IF9fcDFfMTg4OyBcCisgIHVpbnQxNng4X3QgX19yZXRfMTg4OyBcCisgIF9fcmV0XzE4OCA9ICh1aW50MTZ4OF90KSh2Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fczBfMTg4KSwgKHVpbnQxNng0X3QpKHZxc2hybl9uX3UzMihfX3MxXzE4OCwgX19wMl8xODgpKSkpOyBcCisgIF9fcmV0XzE4ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9oaWdoX25fdTMyKF9fcDBfMTg5LCBfX3AxXzE4OSwgX19wMl8xODkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMTg5ID0gX19wMF8xODk7IFwKKyAgdWludDMyeDRfdCBfX3MxXzE4OSA9IF9fcDFfMTg5OyBcCisgIHVpbnQxNng0X3QgX19yZXYwXzE4OTsgIF9fcmV2MF8xODkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE4OSwgX19zMF8xODksIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxXzE4OTsgIF9fcmV2MV8xODkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE4OSwgX19zMV8xODksIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMTg5OyBcCisgIF9fcmV0XzE4OSA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fcmV2MF8xODkpLCAodWludDE2eDRfdCkoX19ub3N3YXBfdnFzaHJuX25fdTMyKF9fcmV2MV8xODksIF9fcDJfMTg5KSkpKTsgXAorICBfX3JldF8xODkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xODksIF9fcmV0XzE4OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTg5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5faGlnaF9uX3U2NChfX3AwXzE5MCwgX19wMV8xOTAsIF9fcDJfMTkwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzE5MCA9IF9fcDBfMTkwOyBcCisgIHVpbnQ2NHgyX3QgX19zMV8xOTAgPSBfX3AxXzE5MDsgXAorICB1aW50MzJ4NF90IF9fcmV0XzE5MDsgXAorICBfX3JldF8xOTAgPSAodWludDMyeDRfdCkodmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3MwXzE5MCksICh1aW50MzJ4Ml90KSh2cXNocm5fbl91NjQoX19zMV8xOTAsIF9fcDJfMTkwKSkpKTsgXAorICBfX3JldF8xOTA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5faGlnaF9uX3U2NChfX3AwXzE5MSwgX19wMV8xOTEsIF9fcDJfMTkxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzE5MSA9IF9fcDBfMTkxOyBcCisgIHVpbnQ2NHgyX3QgX19zMV8xOTEgPSBfX3AxXzE5MTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MF8xOTE7ICBfX3JldjBfMTkxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xOTEsIF9fczBfMTkxLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MV8xOTE7ICBfX3JldjFfMTkxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xOTEsIF9fczFfMTkxLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0XzE5MTsgXAorICBfX3JldF8xOTEgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3JldjBfMTkxKSwgKHVpbnQzMngyX3QpKF9fbm9zd2FwX3Zxc2hybl9uX3U2NChfX3JldjFfMTkxLCBfX3AyXzE5MSkpKSk7IFwKKyAgX19yZXRfMTkxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTkxLCBfX3JldF8xOTEsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE5MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91MTYoX19wMF8xOTIsIF9fcDFfMTkyLCBfX3AyXzE5MikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzE5MiA9IF9fcDBfMTkyOyBcCisgIHVpbnQxNng4X3QgX19zMV8xOTIgPSBfX3AxXzE5MjsgXAorICB1aW50OHgxNl90IF9fcmV0XzE5MjsgXAorICBfX3JldF8xOTIgPSAodWludDh4MTZfdCkodmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19zMF8xOTIpLCAodWludDh4OF90KSh2cXNocm5fbl91MTYoX19zMV8xOTIsIF9fcDJfMTkyKSkpKTsgXAorICBfX3JldF8xOTI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5faGlnaF9uX3UxNihfX3AwXzE5MywgX19wMV8xOTMsIF9fcDJfMTkzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMTkzID0gX19wMF8xOTM7IFwKKyAgdWludDE2eDhfdCBfX3MxXzE5MyA9IF9fcDFfMTkzOyBcCisgIHVpbnQ4eDhfdCBfX3JldjBfMTkzOyAgX19yZXYwXzE5MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTkzLCBfX3MwXzE5MywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjFfMTkzOyAgX19yZXYxXzE5MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTkzLCBfX3MxXzE5MywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldF8xOTM7IFwKKyAgX19yZXRfMTkzID0gKHVpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fcmV2MF8xOTMpLCAodWludDh4OF90KShfX25vc3dhcF92cXNocm5fbl91MTYoX19yZXYxXzE5MywgX19wMl8xOTMpKSkpOyBcCisgIF9fcmV0XzE5MyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5MywgX19yZXRfMTkzLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xOTM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybl9oaWdoX25fczMyKF9fcDBfMTk0LCBfX3AxXzE5NCwgX19wMl8xOTQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8xOTQgPSBfX3AwXzE5NDsgXAorICBpbnQzMng0X3QgX19zMV8xOTQgPSBfX3AxXzE5NDsgXAorICBpbnQxNng4X3QgX19yZXRfMTk0OyBcCisgIF9fcmV0XzE5NCA9IChpbnQxNng4X3QpKHZjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3MwXzE5NCksIChpbnQxNng0X3QpKHZxc2hybl9uX3MzMihfX3MxXzE5NCwgX19wMl8xOTQpKSkpOyBcCisgIF9fcmV0XzE5NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9oaWdoX25fczMyKF9fcDBfMTk1LCBfX3AxXzE5NSwgX19wMl8xOTUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8xOTUgPSBfX3AwXzE5NTsgXAorICBpbnQzMng0X3QgX19zMV8xOTUgPSBfX3AxXzE5NTsgXAorICBpbnQxNng0X3QgX19yZXYwXzE5NTsgIF9fcmV2MF8xOTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzE5NSwgX19zMF8xOTUsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjFfMTk1OyAgX19yZXYxXzE5NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMTk1LCBfX3MxXzE5NSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzE5NTsgXAorICBfX3JldF8xOTUgPSAoaW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19yZXYwXzE5NSksIChpbnQxNng0X3QpKF9fbm9zd2FwX3Zxc2hybl9uX3MzMihfX3JldjFfMTk1LCBfX3AyXzE5NSkpKSk7IFwKKyAgX19yZXRfMTk1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMTk1LCBfX3JldF8xOTUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzE5NTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl9zNjQoX19wMF8xOTYsIF9fcDFfMTk2LCBfX3AyXzE5NikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzE5NiA9IF9fcDBfMTk2OyBcCisgIGludDY0eDJfdCBfX3MxXzE5NiA9IF9fcDFfMTk2OyBcCisgIGludDMyeDRfdCBfX3JldF8xOTY7IFwKKyAgX19yZXRfMTk2ID0gKGludDMyeDRfdCkodmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fczBfMTk2KSwgKGludDMyeDJfdCkodnFzaHJuX25fczY0KF9fczFfMTk2LCBfX3AyXzE5NikpKSk7IFwKKyAgX19yZXRfMTk2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl9zNjQoX19wMF8xOTcsIF9fcDFfMTk3LCBfX3AyXzE5NykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzE5NyA9IF9fcDBfMTk3OyBcCisgIGludDY0eDJfdCBfX3MxXzE5NyA9IF9fcDFfMTk3OyBcCisgIGludDMyeDJfdCBfX3JldjBfMTk3OyAgX19yZXYwXzE5NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMTk3LCBfX3MwXzE5NywgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MV8xOTc7ICBfX3JldjFfMTk3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8xOTcsIF9fczFfMTk3LCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXRfMTk3OyBcCisgIF9fcmV0XzE5NyA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3JldjBfMTk3KSwgKGludDMyeDJfdCkoX19ub3N3YXBfdnFzaHJuX25fczY0KF9fcmV2MV8xOTcsIF9fcDJfMTk3KSkpKTsgXAorICBfX3JldF8xOTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8xOTcsIF9fcmV0XzE5NywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMTk3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocm5faGlnaF9uX3MxNihfX3AwXzE5OCwgX19wMV8xOTgsIF9fcDJfMTk4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8xOTggPSBfX3AwXzE5ODsgXAorICBpbnQxNng4X3QgX19zMV8xOTggPSBfX3AxXzE5ODsgXAorICBpbnQ4eDE2X3QgX19yZXRfMTk4OyBcCisgIF9fcmV0XzE5OCA9IChpbnQ4eDE2X3QpKHZjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19zMF8xOTgpLCAoaW50OHg4X3QpKHZxc2hybl9uX3MxNihfX3MxXzE5OCwgX19wMl8xOTgpKSkpOyBcCisgIF9fcmV0XzE5ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybl9oaWdoX25fczE2KF9fcDBfMTk5LCBfX3AxXzE5OSwgX19wMl8xOTkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzE5OSA9IF9fcDBfMTk5OyBcCisgIGludDE2eDhfdCBfX3MxXzE5OSA9IF9fcDFfMTk5OyBcCisgIGludDh4OF90IF9fcmV2MF8xOTk7ICBfX3JldjBfMTk5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8xOTksIF9fczBfMTk5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxXzE5OTsgIF9fcmV2MV8xOTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzE5OSwgX19zMV8xOTksIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF8xOTk7IFwKKyAgX19yZXRfMTk5ID0gKGludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfczgoKGludDh4OF90KShfX3JldjBfMTk5KSwgKGludDh4OF90KShfX25vc3dhcF92cXNocm5fbl9zMTYoX19yZXYxXzE5OSwgX19wMl8xOTkpKSkpOyBcCisgIF9fcmV0XzE5OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzE5OSwgX19yZXRfMTk5LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8xOTk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybnNfbl91MzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5zX25fdTMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuc19uX3UzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybnNfbl91MzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybmRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5kX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hybmhfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuaF9uX3UxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hybmhfbl91MTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzaHJuaF9uX3UxNihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybnNfbl9zMzIoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5zX25fczMyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczAgPSBfX3AwOyBcCisgIGludDE2X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzaHJuc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQzMl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hybmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXNocm5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaHJuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5oX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJuaF9uX3MxNihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwID0gX19wMDsgXAorICBpbnQ4X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXNocm5oX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zMzIoX19wMF8yMDAsIF9fcDFfMjAwLCBfX3AyXzIwMCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzIwMCA9IF9fcDBfMjAwOyBcCisgIGludDMyeDRfdCBfX3MxXzIwMCA9IF9fcDFfMjAwOyBcCisgIGludDE2eDhfdCBfX3JldF8yMDA7IFwKKyAgX19yZXRfMjAwID0gKGludDE2eDhfdCkodmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fczBfMjAwKSwgKGludDE2eDRfdCkodnFzaHJ1bl9uX3MzMihfX3MxXzIwMCwgX19wMl8yMDApKSkpOyBcCisgIF9fcmV0XzIwMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hydW5faGlnaF9uX3MzMihfX3AwXzIwMSwgX19wMV8yMDEsIF9fcDJfMjAxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMjAxID0gX19wMF8yMDE7IFwKKyAgaW50MzJ4NF90IF9fczFfMjAxID0gX19wMV8yMDE7IFwKKyAgaW50MTZ4NF90IF9fcmV2MF8yMDE7ICBfX3JldjBfMjAxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMDEsIF9fczBfMjAxLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXYxXzIwMTsgIF9fcmV2MV8yMDEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIwMSwgX19zMV8yMDEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDhfdCBfX3JldF8yMDE7IFwKKyAgX19yZXRfMjAxID0gKGludDE2eDhfdCkoX19ub3N3YXBfdmNvbWJpbmVfczE2KChpbnQxNng0X3QpKF9fcmV2MF8yMDEpLCAoaW50MTZ4NF90KShfX25vc3dhcF92cXNocnVuX25fczMyKF9fcmV2MV8yMDEsIF9fcDJfMjAxKSkpKTsgXAorICBfX3JldF8yMDEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMDEsIF9fcmV0XzIwMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjAxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zNjQoX19wMF8yMDIsIF9fcDFfMjAyLCBfX3AyXzIwMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzIwMiA9IF9fcDBfMjAyOyBcCisgIGludDY0eDJfdCBfX3MxXzIwMiA9IF9fcDFfMjAyOyBcCisgIGludDMyeDRfdCBfX3JldF8yMDI7IFwKKyAgX19yZXRfMjAyID0gKGludDMyeDRfdCkodmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fczBfMjAyKSwgKGludDMyeDJfdCkodnFzaHJ1bl9uX3M2NChfX3MxXzIwMiwgX19wMl8yMDIpKSkpOyBcCisgIF9fcmV0XzIwMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hydW5faGlnaF9uX3M2NChfX3AwXzIwMywgX19wMV8yMDMsIF9fcDJfMjAzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4Ml90IF9fczBfMjAzID0gX19wMF8yMDM7IFwKKyAgaW50NjR4Ml90IF9fczFfMjAzID0gX19wMV8yMDM7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MF8yMDM7ICBfX3JldjBfMjAzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMDMsIF9fczBfMjAzLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXYxXzIwMzsgIF9fcmV2MV8yMDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIwMywgX19zMV8yMDMsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldF8yMDM7IFwKKyAgX19yZXRfMjAzID0gKGludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fcmV2MF8yMDMpLCAoaW50MzJ4Ml90KShfX25vc3dhcF92cXNocnVuX25fczY0KF9fcmV2MV8yMDMsIF9fcDJfMjAzKSkpKTsgXAorICBfX3JldF8yMDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMDMsIF9fcmV0XzIwMywgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjAzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zMTYoX19wMF8yMDQsIF9fcDFfMjA0LCBfX3AyXzIwNCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OF90IF9fczBfMjA0ID0gX19wMF8yMDQ7IFwKKyAgaW50MTZ4OF90IF9fczFfMjA0ID0gX19wMV8yMDQ7IFwKKyAgaW50OHgxNl90IF9fcmV0XzIwNDsgXAorICBfX3JldF8yMDQgPSAoaW50OHgxNl90KSh2Y29tYmluZV9zOCgoaW50OHg4X3QpKF9fczBfMjA0KSwgKGludDh4OF90KSh2cXNocnVuX25fczE2KF9fczFfMjA0LCBfX3AyXzIwNCkpKSk7IFwKKyAgX19yZXRfMjA0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczE2KF9fcDBfMjA1LCBfX3AxXzIwNSwgX19wMl8yMDUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzIwNSA9IF9fcDBfMjA1OyBcCisgIGludDE2eDhfdCBfX3MxXzIwNSA9IF9fcDFfMjA1OyBcCisgIGludDh4OF90IF9fcmV2MF8yMDU7ICBfX3JldjBfMjA1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMDUsIF9fczBfMjA1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxXzIwNTsgIF9fcmV2MV8yMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIwNSwgX19zMV8yMDUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF8yMDU7IFwKKyAgX19yZXRfMjA1ID0gKGludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfczgoKGludDh4OF90KShfX3JldjBfMjA1KSwgKGludDh4OF90KShfX25vc3dhcF92cXNocnVuX25fczE2KF9fcmV2MV8yMDUsIF9fcDJfMjA1KSkpKTsgXAorICBfX3JldF8yMDUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMDUsIF9fcmV0XzIwNSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjA1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXNocnVuc19uX3MzMihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNl90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5zX25fczMyKF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bnNfbl9zMzIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuc19uX3MzMihfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFzaHJ1bmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXNocnVuZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZxc2hydW5kX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDMyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxc2hydW5oX25fczE2KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczAgPSBfX3AwOyBcCisgIGludDhfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc2hydW5oX25fczE2KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFzaHJ1bmhfbl9zMTYoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50OF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnFzaHJ1bmhfbl9zMTYoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4X3QgdnFzdWJiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViYl91OChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDhfdCB2cXN1YmJfdTgodWludDhfdCBfX3AwLCB1aW50OF90IF9fcDEpIHsKKyAgdWludDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDhfdCkgX19idWlsdGluX25lb25fdnFzdWJiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZxc3Vic191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3Vic191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMl90IHZxc3Vic191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3Vic191MzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnFzdWJkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFzdWJkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnFzdWJkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnFzdWJkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZfdCB2cXN1YmhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZfdCB2cXN1YmhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2cXN1YmJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDhfdCB2cXN1YmJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmJfczgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cXN1YnNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxKSB7CisgIGludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3Vic19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnFzdWJzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyX3QgX19ub3N3YXBfdnFzdWJzX3MzMihpbnQzMl90IF9fcDAsIGludDMyX3QgX19wMSkgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IChpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92cXN1YnNfczMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnFzdWJkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cXN1YmRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NF90IHZxc3ViZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnFzdWJkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZxc3ViaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZfdCkgX19idWlsdGluX25lb25fdnFzdWJoX3MxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZfdCB2cXN1YmhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZfdCBfX25vc3dhcF92cXN1YmhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Zxc3ViaF9zMTYoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZxdGJsMV9wOChwb2x5OHgxNl90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZxdGJsMV9wOChwb2x5OHgxNl90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnF0YmwxcV9wOChwb2x5OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cXRibDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnF0YmwxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXRibDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXRibDFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXRibDFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXRibDFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnF0YmwxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxdGJsMV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXRibDFfczgoaW50OHgxNl90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnF0YmwyX3A4KHBvbHk4eDE2eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwyX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4OF90KV9fcDEsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnF0YmwyX3A4KHBvbHk4eDE2eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICBwb2x5OHgxNngyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMl92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnF0YmwycV9wOChwb2x5OHgxNngyX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMnFfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDEsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cXRibDJxX3A4KHBvbHk4eDE2eDJfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZ4Ml90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxdGJsMnFfdTgodWludDh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnF0YmwycV91OCh1aW50OHgxNngyX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDJfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwycV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MSwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxdGJsMnFfczgoaW50OHgxNngyX3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMnFfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDEsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxdGJsMnFfczgoaW50OHgxNngyX3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNngyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMnFfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXRibDJfdTgodWludDh4MTZ4Ml90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDJfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHg4X3QpX19wMSwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnF0YmwyX3U4KHVpbnQ4eDE2eDJfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHgxNngyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMl92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXRibDJfczgoaW50OHgxNngyX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMl92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnF0YmwyX3M4KGludDh4MTZ4Ml90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHgxNngyX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsMl92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cXRibDNfcDgocG9seTh4MTZ4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHg4X3QpX19wMSwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cXRibDNfcDgocG9seTh4MTZ4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM192KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cXRibDNxX3A4KHBvbHk4eDE2eDNfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwzcV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMSwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZxdGJsM3FfcDgocG9seTh4MTZ4M190IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNngzX3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDNxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnF0YmwzcV91OCh1aW50OHgxNngzX3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXRibDNxX3U4KHVpbnQ4eDE2eDNfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZ4M190IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwzcV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnF0YmwzcV9zOChpbnQ4eDE2eDNfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YmwzcV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMSwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnF0YmwzcV9zOChpbnQ4eDE2eDNfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM3FfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MSwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxdGJsM191OCh1aW50OHgxNngzX3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM192KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDhfdClfX3AxLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXRibDNfdTgodWludDh4MTZ4M190IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDE2eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM192KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxdGJsM19zOChpbnQ4eDE2eDNfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YmwzX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4OF90KV9fcDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXRibDNfczgoaW50OHgxNngzX3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDE2eDNfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsM192KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZxdGJsNF9wOChwb2x5OHgxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNF92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDhfdClfX3AxLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZxdGJsNF9wOChwb2x5OHgxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgcG9seTh4MTZ4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNF92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFszXSwgKGludDh4OF90KV9fcmV2MSwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZxdGJsNHFfcDgocG9seTh4MTZ4NF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AwLnZhbFszXSwgKGludDh4MTZfdClfX3AxLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnF0Ymw0cV9wOChwb2x5OHgxNng0X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2eDRfdCBfX3JldjA7CisgIF9fcmV2MC52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFswXSwgX19wMC52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMV0sIF9fcDAudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzJdLCBfX3AwLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFszXSwgX19wMC52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRxX3YoKGludDh4MTZfdClfX3JldjAudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjAudmFsWzNdLCAoaW50OHgxNl90KV9fcmV2MSwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXRibDRxX3U4KHVpbnQ4eDE2eDRfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19wMC52YWxbMF0sIChpbnQ4eDE2X3QpX19wMC52YWxbMV0sIChpbnQ4eDE2X3QpX19wMC52YWxbMl0sIChpbnQ4eDE2X3QpX19wMC52YWxbM10sIChpbnQ4eDE2X3QpX19wMSwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxdGJsNHFfdTgodWludDh4MTZ4NF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNng0X3QgX19yZXYwOworICBfX3JldjAudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMF0sIF9fcDAudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzFdLCBfX3AwLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsyXSwgX19wMC52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbM10sIF9fcDAudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Ymw0cV92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFszXSwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXRibDRxX3M4KGludDh4MTZ4NF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRxX3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AwLnZhbFszXSwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXRibDRxX3M4KGludDh4MTZ4NF90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZ4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNHFfdigoaW50OHgxNl90KV9fcmV2MC52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjAudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbM10sIChpbnQ4eDE2X3QpX19yZXYxLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnF0Ymw0X3U4KHVpbnQ4eDE2eDRfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Ymw0X3YoKGludDh4MTZfdClfX3AwLnZhbFswXSwgKGludDh4MTZfdClfX3AwLnZhbFsxXSwgKGludDh4MTZfdClfX3AwLnZhbFsyXSwgKGludDh4MTZfdClfX3AwLnZhbFszXSwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxdGJsNF91OCh1aW50OHgxNng0X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4MTZ4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNF92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFszXSwgKGludDh4OF90KV9fcmV2MSwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnF0Ymw0X3M4KGludDh4MTZ4NF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRibDRfdigoaW50OHgxNl90KV9fcDAudmFsWzBdLCAoaW50OHgxNl90KV9fcDAudmFsWzFdLCAoaW50OHgxNl90KV9fcDAudmFsWzJdLCAoaW50OHgxNl90KV9fcDAudmFsWzNdLCAoaW50OHg4X3QpX19wMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxdGJsNF9zOChpbnQ4eDE2eDRfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4MTZ4NF90IF9fcmV2MDsKKyAgX19yZXYwLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzBdLCBfX3AwLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MC52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLnZhbFsxXSwgX19wMC52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjAudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMC52YWxbMl0sIF9fcDAudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYwLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAudmFsWzNdLCBfX3AwLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJsNF92KChpbnQ4eDE2X3QpX19yZXYwLnZhbFswXSwgKGludDh4MTZfdClfX3JldjAudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MC52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYwLnZhbFszXSwgKGludDh4OF90KV9fcmV2MSwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnF0YngxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cXRieDFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4OF90KV9fcmV2MiwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZxdGJ4MXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDE2X3QpX19wMiwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZxdGJ4MXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHgxNl90KV9fcmV2MiwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXRieDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngxcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHgxNl90KV9fcDIsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXRieDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngxcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgKGludDh4MTZfdClfX3JldjIsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXRieDFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MXFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgKGludDh4MTZfdClfX3AyLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXRieDFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MXFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDE2X3QpX19yZXYyLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnF0YngxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDFfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnF0YngxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngxX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxdGJ4MV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MV92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnF0YngxX3M4KGludDh4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MV92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2cXRieDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2eDJfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngyX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDhfdClfX3AyLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZxdGJ4Ml9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZ4Ml90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZ4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MiwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZxdGJ4MnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNngyX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MnFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMiwgMzYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZxdGJ4MnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNngyX3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDJfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngycV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjIsIDM2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnF0YngycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2eDJfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngycV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AyLCA0OCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnF0YngycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2eDJfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZ4Ml90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MiwgNDgpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZxdGJ4MnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZ4Ml90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDJxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDIsIDMyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZxdGJ4MnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZ4Ml90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNngyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4MnFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYyLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnF0YngyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNngyX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMiwgMTYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnF0YngyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHgxNngyX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNngyX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4Ml92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYyLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2cXRieDJfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNngyX3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4Ml92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHg4X3QpX19wMiwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZxdGJ4Ml9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2eDJfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDJfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngyX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjIsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZxdGJ4M19wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4MTZ4M190IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4OF90KV9fcDIsIDQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnF0YngzX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNngzX3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNngzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYyLCA0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnF0YngzcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2eDNfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngzcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AyLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnF0YngzcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2eDNfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZ4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0YngzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MiwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cXRieDNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZ4M190IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDIsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cXRieDNxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZ4M190IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNngzX3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYyLCA0OCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnF0YngzcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNngzX3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMiwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnF0YngzcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNngzX3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M3FfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjIsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2cXRieDNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2eDNfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCAxNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDhfdCB2cXRieDNfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDE2eDNfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDNfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4M192KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjIsIDE2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZxdGJ4M19zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDE2eDNfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDhfdClfX3AyLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnF0YngzX3M4KGludDh4OF90IF9fcDAsIGludDh4MTZ4M190IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZ4M190IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0YngzX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MiwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnF0Yng0X3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHgxNng0X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDEudmFsWzNdLCAoaW50OHg4X3QpX19wMiwgNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2cXRieDRfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDE2eDRfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIChpbnQ4eDhfdClfX3JldjIsIDQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2cXRieDRxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZ4NF90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEudmFsWzBdLCAoaW50OHgxNl90KV9fcDEudmFsWzFdLCAoaW50OHgxNl90KV9fcDEudmFsWzJdLCAoaW50OHgxNl90KV9fcDEudmFsWzNdLCAoaW50OHgxNl90KV9fcDIsIDM2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2cXRieDRxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZ4NF90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNng0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Yng0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIChpbnQ4eDE2X3QpX19yZXYyLCAzNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZxdGJ4NHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNng0X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMS52YWxbMF0sIChpbnQ4eDE2X3QpX19wMS52YWxbMV0sIChpbnQ4eDE2X3QpX19wMS52YWxbMl0sIChpbnQ4eDE2X3QpX19wMS52YWxbM10sIChpbnQ4eDE2X3QpX19wMiwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZxdGJ4NHFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNng0X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2eDRfdCBfX3JldjE7CisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFswXSwgX19wMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMV0sIF9fcDEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzJdLCBfX3AxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFszXSwgX19wMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgKGludDh4MTZfdClfX3JldjIsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cXRieDRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2eDRfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnF0Yng0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLnZhbFszXSwgKGludDh4MTZfdClfX3AyLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2cXRieDRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2eDRfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZ4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAoaW50OHgxNl90KV9fcmV2MiwgMzIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZxdGJ4NF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZ4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZxdGJ4NF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4MTZ4NF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZ4NF90IF9fcmV2MTsKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzBdLCBfX3AxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsxXSwgX19wMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMl0sIF9fcDEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzNdLCBfX3AxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZxdGJ4NF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgKGludDh4OF90KV9fcmV2MiwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnF0Yng0X3M4KGludDh4OF90IF9fcDAsIGludDh4MTZ4NF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92cXRieDRfdigoaW50OHg4X3QpX19wMCwgKGludDh4MTZfdClfX3AxLnZhbFswXSwgKGludDh4MTZfdClfX3AxLnZhbFsxXSwgKGludDh4MTZfdClfX3AxLnZhbFsyXSwgKGludDh4MTZfdClfX3AxLnZhbFszXSwgKGludDh4OF90KV9fcDIsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cXRieDRfczgoaW50OHg4X3QgX19wMCwgaW50OHgxNng0X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNng0X3QgX19yZXYxOworICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbMF0sIF9fcDEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEudmFsWzFdLCBfX3AxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLnZhbFsyXSwgX19wMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMS52YWxbM10sIF9fcDEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnF0Yng0X3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAoaW50OHg4X3QpX19yZXYyLCAwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnJhZGRobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTE2KF9fcDAsIHZyYWRkaG5fdTMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2cmFkZGhuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MTYoX19yZXYwLCBfX25vc3dhcF92cmFkZGhuX3UzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2cmFkZGhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MzIoX19wMCwgdnJhZGRobl91NjQoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZyYWRkaG5faGlnaF91NjQodWludDMyeDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEsIHVpbnQ2NHgyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZyYWRkaG5fdTY0KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZyYWRkaG5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTgoX19wMCwgdnJhZGRobl91MTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyYWRkaG5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91OChfX3JldjAsIF9fbm9zd2FwX3ZyYWRkaG5fdTE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnJhZGRobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV9zMTYoX19wMCwgdnJhZGRobl9zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnJhZGRobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMTYoX19yZXYwLCBfX25vc3dhcF92cmFkZGhuX3MzMihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZyYWRkaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczMyKF9fcDAsIHZyYWRkaG5fczY0KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZyYWRkaG5faGlnaF9zNjQoaW50MzJ4Ml90IF9fcDAsIGludDY0eDJfdCBfX3AxLCBpbnQ2NHgyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczMyKF9fcmV2MCwgX19ub3N3YXBfdnJhZGRobl9zNjQoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmFkZGhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczgoX19wMCwgdnJhZGRobl9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJhZGRobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczgoX19yZXYwLCBfX25vc3dhcF92cmFkZGhuX3MxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4OF90IHZyYml0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4OF90KSBfX2J1aWx0aW5fbmVvbl92cmJpdF92KChpbnQ4eDhfdClfX3AwLCA0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZyYml0X3A4KHBvbHk4eDhfdCBfX3AwKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0X3YoKGludDh4OF90KV9fcmV2MCwgNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZyYml0cV9wOChwb2x5OHgxNl90IF9fcDApIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAocG9seTh4MTZfdCkgX19idWlsdGluX25lb25fdnJiaXRxX3YoKGludDh4MTZfdClfX3AwLCAzNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnJiaXRxX3A4KHBvbHk4eDE2X3QgX19wMCkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92cmJpdHFfdigoaW50OHgxNl90KV9fcmV2MCwgMzYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cmJpdHFfdTgodWludDh4MTZfdCBfX3AwKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0cV92KChpbnQ4eDE2X3QpX19wMCwgNDgpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZyYml0cV91OCh1aW50OHgxNl90IF9fcDApIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4MTZfdCkgX19idWlsdGluX25lb25fdnJiaXRxX3YoKGludDh4MTZfdClfX3JldjAsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2cmJpdHFfczgoaW50OHgxNl90IF9fcDApIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0cV92KChpbnQ4eDE2X3QpX19wMCwgMzIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnJiaXRxX3M4KGludDh4MTZfdCBfX3AwKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0cV92KChpbnQ4eDE2X3QpX19yZXYwLCAzMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnJiaXRfdTgodWludDh4OF90IF9fcDApIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0X3YoKGludDh4OF90KV9fcDAsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZyYml0X3U4KHVpbnQ4eDhfdCBfX3AwKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0X3YoKGludDh4OF90KV9fcmV2MCwgMTYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnJiaXRfczgoaW50OHg4X3QgX19wMCkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0X3YoKGludDh4OF90KV9fcDAsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2cmJpdF9zOChpbnQ4eDhfdCBfX3AwKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3ZyYml0X3YoKGludDh4OF90KV9fcmV2MCwgMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2cmVjcGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJlY3BlcV92KChpbnQ4eDE2X3QpX19wMCwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVjcGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJlY3BlX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlY3BlX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJlY3BlX3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnJlY3BlZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZWRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnJlY3BlZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwZWRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cmVjcGVzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJlY3Blc19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cmVjcGVzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJlY3Blc19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJlY3BzcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc3FfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2cmVjcHNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2cmVjcHNfZjY0KGZsb2F0NjR4MV90IF9fcDAsIGZsb2F0NjR4MV90IF9fcDEpIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJlY3BzX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJlY3BzX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZyZWNwc2RfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJlY3BzZF9mNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjRfdCB2cmVjcHNkX2Y2NChmbG9hdDY0X3QgX19wMCwgZmxvYXQ2NF90IF9fcDEpIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc2RfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cmVjcHNzX2YzMihmbG9hdDMyX3QgX19wMCwgZmxvYXQzMl90IF9fcDEpIHsKKyAgZmxvYXQzMl90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNwc3NfZjMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnJlY3Bzc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cmVjcHNzX2YzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnJlY3B4ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNweGRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnJlY3B4ZF9mNjQoZmxvYXQ2NF90IF9fcDApIHsKKyAgZmxvYXQ2NF90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZyZWNweGRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cmVjcHhzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJlY3B4c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cmVjcHhzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJlY3B4c19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnJzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaGxkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnJzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaGxkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZyc2hsZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaGxkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2cnNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc2hsZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaHJkX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnJzaHJkX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNocmRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9oaWdoX25fdTMyKF9fcDBfMjA2LCBfX3AxXzIwNiwgX19wMl8yMDYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMjA2ID0gX19wMF8yMDY7IFwKKyAgdWludDMyeDRfdCBfX3MxXzIwNiA9IF9fcDFfMjA2OyBcCisgIHVpbnQxNng4X3QgX19yZXRfMjA2OyBcCisgIF9fcmV0XzIwNiA9ICh1aW50MTZ4OF90KSh2Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fczBfMjA2KSwgKHVpbnQxNng0X3QpKHZyc2hybl9uX3UzMihfX3MxXzIwNiwgX19wMl8yMDYpKSkpOyBcCisgIF9fcmV0XzIwNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9oaWdoX25fdTMyKF9fcDBfMjA3LCBfX3AxXzIwNywgX19wMl8yMDcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NF90IF9fczBfMjA3ID0gX19wMF8yMDc7IFwKKyAgdWludDMyeDRfdCBfX3MxXzIwNyA9IF9fcDFfMjA3OyBcCisgIHVpbnQxNng0X3QgX19yZXYwXzIwNzsgIF9fcmV2MF8yMDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIwNywgX19zMF8yMDcsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXYxXzIwNzsgIF9fcmV2MV8yMDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIwNywgX19zMV8yMDcsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMjA3OyBcCisgIF9fcmV0XzIwNyA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV91MTYoKHVpbnQxNng0X3QpKF9fcmV2MF8yMDcpLCAodWludDE2eDRfdCkoX19ub3N3YXBfdnJzaHJuX25fdTMyKF9fcmV2MV8yMDcsIF9fcDJfMjA3KSkpKTsgXAorICBfX3JldF8yMDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMDcsIF9fcmV0XzIwNywgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjA3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5faGlnaF9uX3U2NChfX3AwXzIwOCwgX19wMV8yMDgsIF9fcDJfMjA4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzIwOCA9IF9fcDBfMjA4OyBcCisgIHVpbnQ2NHgyX3QgX19zMV8yMDggPSBfX3AxXzIwODsgXAorICB1aW50MzJ4NF90IF9fcmV0XzIwODsgXAorICBfX3JldF8yMDggPSAodWludDMyeDRfdCkodmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3MwXzIwOCksICh1aW50MzJ4Ml90KSh2cnNocm5fbl91NjQoX19zMV8yMDgsIF9fcDJfMjA4KSkpKTsgXAorICBfX3JldF8yMDg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5faGlnaF9uX3U2NChfX3AwXzIwOSwgX19wMV8yMDksIF9fcDJfMjA5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzIwOSA9IF9fcDBfMjA5OyBcCisgIHVpbnQ2NHgyX3QgX19zMV8yMDkgPSBfX3AxXzIwOTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MF8yMDk7ICBfX3JldjBfMjA5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMDksIF9fczBfMjA5LCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV2MV8yMDk7ICBfX3JldjFfMjA5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMDksIF9fczFfMjA5LCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0XzIwOTsgXAorICBfX3JldF8yMDkgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3JldjBfMjA5KSwgKHVpbnQzMngyX3QpKF9fbm9zd2FwX3Zyc2hybl9uX3U2NChfX3JldjFfMjA5LCBfX3AyXzIwOSkpKSk7IFwKKyAgX19yZXRfMjA5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjA5LCBfX3JldF8yMDksIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIwOTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91MTYoX19wMF8yMTAsIF9fcDFfMjEwLCBfX3AyXzIxMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDhfdCBfX3MwXzIxMCA9IF9fcDBfMjEwOyBcCisgIHVpbnQxNng4X3QgX19zMV8yMTAgPSBfX3AxXzIxMDsgXAorICB1aW50OHgxNl90IF9fcmV0XzIxMDsgXAorICBfX3JldF8yMTAgPSAodWludDh4MTZfdCkodmNvbWJpbmVfdTgoKHVpbnQ4eDhfdCkoX19zMF8yMTApLCAodWludDh4OF90KSh2cnNocm5fbl91MTYoX19zMV8yMTAsIF9fcDJfMjEwKSkpKTsgXAorICBfX3JldF8yMTA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cnNocm5faGlnaF9uX3UxNihfX3AwXzIxMSwgX19wMV8yMTEsIF9fcDJfMjExKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMjExID0gX19wMF8yMTE7IFwKKyAgdWludDE2eDhfdCBfX3MxXzIxMSA9IF9fcDFfMjExOyBcCisgIHVpbnQ4eDhfdCBfX3JldjBfMjExOyAgX19yZXYwXzIxMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjExLCBfX3MwXzIxMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjFfMjExOyAgX19yZXYxXzIxMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjExLCBfX3MxXzIxMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldF8yMTE7IFwKKyAgX19yZXRfMjExID0gKHVpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fcmV2MF8yMTEpLCAodWludDh4OF90KShfX25vc3dhcF92cnNocm5fbl91MTYoX19yZXYxXzIxMSwgX19wMl8yMTEpKSkpOyBcCisgIF9fcmV0XzIxMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIxMSwgX19yZXRfMjExLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMTE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZyc2hybl9oaWdoX25fczMyKF9fcDBfMjEyLCBfX3AxXzIxMiwgX19wMl8yMTIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8yMTIgPSBfX3AwXzIxMjsgXAorICBpbnQzMng0X3QgX19zMV8yMTIgPSBfX3AxXzIxMjsgXAorICBpbnQxNng4X3QgX19yZXRfMjEyOyBcCisgIF9fcmV0XzIxMiA9IChpbnQxNng4X3QpKHZjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3MwXzIxMiksIChpbnQxNng0X3QpKHZyc2hybl9uX3MzMihfX3MxXzIxMiwgX19wMl8yMTIpKSkpOyBcCisgIF9fcmV0XzIxMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9oaWdoX25fczMyKF9fcDBfMjEzLCBfX3AxXzIxMywgX19wMl8yMTMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0X3QgX19zMF8yMTMgPSBfX3AwXzIxMzsgXAorICBpbnQzMng0X3QgX19zMV8yMTMgPSBfX3AxXzIxMzsgXAorICBpbnQxNng0X3QgX19yZXYwXzIxMzsgIF9fcmV2MF8yMTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxMywgX19zMF8yMTMsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldjFfMjEzOyAgX19yZXYxXzIxMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjEzLCBfX3MxXzIxMywgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIxMzsgXAorICBfX3JldF8yMTMgPSAoaW50MTZ4OF90KShfX25vc3dhcF92Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19yZXYwXzIxMyksIChpbnQxNng0X3QpKF9fbm9zd2FwX3Zyc2hybl9uX3MzMihfX3JldjFfMjEzLCBfX3AyXzIxMykpKSk7IFwKKyAgX19yZXRfMjEzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjEzLCBfX3JldF8yMTMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIxMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl9zNjQoX19wMF8yMTQsIF9fcDFfMjE0LCBfX3AyXzIxNCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzIxNCA9IF9fcDBfMjE0OyBcCisgIGludDY0eDJfdCBfX3MxXzIxNCA9IF9fcDFfMjE0OyBcCisgIGludDMyeDRfdCBfX3JldF8yMTQ7IFwKKyAgX19yZXRfMjE0ID0gKGludDMyeDRfdCkodmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fczBfMjE0KSwgKGludDMyeDJfdCkodnJzaHJuX25fczY0KF9fczFfMjE0LCBfX3AyXzIxNCkpKSk7IFwKKyAgX19yZXRfMjE0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl9zNjQoX19wMF8yMTUsIF9fcDFfMjE1LCBfX3AyXzIxNSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzIxNSA9IF9fcDBfMjE1OyBcCisgIGludDY0eDJfdCBfX3MxXzIxNSA9IF9fcDFfMjE1OyBcCisgIGludDMyeDJfdCBfX3JldjBfMjE1OyAgX19yZXYwXzIxNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjE1LCBfX3MwXzIxNSwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV2MV8yMTU7ICBfX3JldjFfMjE1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMTUsIF9fczFfMjE1LCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXRfMjE1OyBcCisgIF9fcmV0XzIxNSA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MzMigoaW50MzJ4Ml90KShfX3JldjBfMjE1KSwgKGludDMyeDJfdCkoX19ub3N3YXBfdnJzaHJuX25fczY0KF9fcmV2MV8yMTUsIF9fcDJfMjE1KSkpKTsgXAorICBfX3JldF8yMTUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMTUsIF9fcmV0XzIxNSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjE1OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNocm5faGlnaF9uX3MxNihfX3AwXzIxNiwgX19wMV8yMTYsIF9fcDJfMjE2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4X3QgX19zMF8yMTYgPSBfX3AwXzIxNjsgXAorICBpbnQxNng4X3QgX19zMV8yMTYgPSBfX3AxXzIxNjsgXAorICBpbnQ4eDE2X3QgX19yZXRfMjE2OyBcCisgIF9fcmV0XzIxNiA9IChpbnQ4eDE2X3QpKHZjb21iaW5lX3M4KChpbnQ4eDhfdCkoX19zMF8yMTYpLCAoaW50OHg4X3QpKHZyc2hybl9uX3MxNihfX3MxXzIxNiwgX19wMl8yMTYpKSkpOyBcCisgIF9fcmV0XzIxNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc2hybl9oaWdoX25fczE2KF9fcDBfMjE3LCBfX3AxXzIxNywgX19wMl8yMTcpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzIxNyA9IF9fcDBfMjE3OyBcCisgIGludDE2eDhfdCBfX3MxXzIxNyA9IF9fcDFfMjE3OyBcCisgIGludDh4OF90IF9fcmV2MF8yMTc7ICBfX3JldjBfMjE3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMTcsIF9fczBfMjE3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxXzIxNzsgIF9fcmV2MV8yMTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzIxNywgX19zMV8yMTcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF8yMTc7IFwKKyAgX19yZXRfMjE3ID0gKGludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfczgoKGludDh4OF90KShfX3JldjBfMjE3KSwgKGludDh4OF90KShfX25vc3dhcF92cnNocm5fbl9zMTYoX19yZXYxXzIxNywgX19wMl8yMTcpKSkpOyBcCisgIF9fcmV0XzIxNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIxNywgX19yZXRfMjE3LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMTc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZyc3FydGVxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnJzcXJ0ZXFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXFfdigoaW50OHgxNl90KV9fcmV2MCwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJzcXJ0ZV9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydGVfdigoaW50OHg4X3QpX19wMCwgMTApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2cnNxcnRlX2Y2NChmbG9hdDY0eDFfdCBfX3AwKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZV92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NF90IHZyc3FydGVkX2Y2NChmbG9hdDY0X3QgX19wMCkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZWRfZjY0KF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnJzcXJ0ZWRfZjY0KGZsb2F0NjRfdCBfX3AwKSB7CisgIGZsb2F0NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NF90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlZF9mNjQoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMl90IHZyc3FydGVzX2YzMihmbG9hdDMyX3QgX19wMCkgeworICBmbG9hdDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJfdCkgX19idWlsdGluX25lb25fdnJzcXJ0ZXNfZjMyKF9fcDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyX3QgdnJzcXJ0ZXNfZjMyKGZsb2F0MzJfdCBfX3AwKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRlc19mMzIoX19wMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnJzcXJ0c3FfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA0Mik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0NjR4Ml90IHZyc3FydHNxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgxX3QgdnJzcXJ0c19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnJzcXJ0c19mNjQoZmxvYXQ2NHgxX3QgX19wMCwgZmxvYXQ2NHgxX3QgX19wMSkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3FydHNfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0X3QgdnJzcXJ0c2RfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c2RfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0X3QgdnJzcXJ0c2RfZjY0KGZsb2F0NjRfdCBfX3AwLCBmbG9hdDY0X3QgX19wMSkgeworICBmbG9hdDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjRfdCkgX19idWlsdGluX25lb25fdnJzcXJ0c2RfZjY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0MzJfdCB2cnNxcnRzc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJfdCB2cnNxcnRzc19mMzIoZmxvYXQzMl90IF9fcDAsIGZsb2F0MzJfdCBfX3AxKSB7CisgIGZsb2F0MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMl90KSBfX2J1aWx0aW5fbmVvbl92cnNxcnRzc19mMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnJzcmFkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnJzcmFkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnJzcmFkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnJzcmFkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cnNyYWRfbl9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Zyc3JhZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZyc3JhZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnJzcmFkX25fczY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZyc3ViaG5faGlnaF91MzIodWludDE2eDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3UxNihfX3AwLCB2cnN1YmhuX3UzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnJzdWJobl9oaWdoX3UzMih1aW50MTZ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTE2KF9fcmV2MCwgX19ub3N3YXBfdnJzdWJobl91MzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnJzdWJobl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTMyKF9fcDAsIHZyc3ViaG5fdTY0KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2cnN1YmhuX2hpZ2hfdTY0KHVpbnQzMngyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxLCB1aW50NjR4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MzIoX19yZXYwLCBfX25vc3dhcF92cnN1YmhuX3U2NChfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2cnN1YmhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3U4KF9fcDAsIHZyc3ViaG5fdTE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2cnN1YmhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoX19yZXYwLCBfX25vc3dhcF92cnN1YmhuX3UxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZyc3ViaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczE2KF9fcDAsIHZyc3ViaG5fczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZyc3ViaG5faGlnaF9zMzIoaW50MTZ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfczE2KF9fcmV2MCwgX19ub3N3YXBfdnJzdWJobl9zMzIoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2cnN1YmhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MzMihfX3AwLCB2cnN1YmhuX3M2NChfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2cnN1YmhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3MzMihfX3JldjAsIF9fbm9zd2FwX3Zyc3ViaG5fczY0KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnJzdWJobl9oaWdoX3MxNihpbnQ4eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3M4KF9fcDAsIHZyc3ViaG5fczE2KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZyc3ViaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3M4KF9fcmV2MCwgX19ub3N3YXBfdnJzdWJobl9zMTYoX19yZXYxLCBfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzZXRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfaTY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRfbGFuZV9pNjQoX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzZXRxX2xhbmVfaTY0KF9fczAsIChpbnQ4eDE2X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2V0cV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0X3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9pNjQoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NF90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2k2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2V0cV9sYW5lX2Y2NChfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNldHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9mNjQoX19zMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNkZWZpbmUgX19ub3N3YXBfdnNldHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX25lb25fdnNldHFfbGFuZV9mNjQoX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c2V0X2xhbmVfZjY0KF9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2Y2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZGVmaW5lIF9fbm9zd2FwX3ZzZXRfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjRfdCBfX3MwID0gX19wMDsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX25lb25fdnNldF9sYW5lX2Y2NChfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZzaGxkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2c2hsZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZzaGxkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnNobGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaGxkX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGRfbl91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF9uX3U2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hsZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxkX25fczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNobGRfbl9zNjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl91OChfX3AwXzIxOCwgX19wMV8yMTgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNl90IF9fczBfMjE4ID0gX19wMF8yMTg7IFwKKyAgdWludDE2eDhfdCBfX3JldF8yMTg7IFwKKyAgX19yZXRfMjE4ID0gKHVpbnQxNng4X3QpKHZzaGxsX25fdTgodmdldF9oaWdoX3U4KF9fczBfMjE4KSwgX19wMV8yMTgpKTsgXAorICBfX3JldF8yMTg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9oaWdoX25fdTgoX19wMF8yMTksIF9fcDFfMjE5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZfdCBfX3MwXzIxOSA9IF9fcDBfMjE5OyBcCisgIHVpbnQ4eDE2X3QgX19yZXYwXzIxOTsgIF9fcmV2MF8yMTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIxOSwgX19zMF8yMTksIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng4X3QgX19yZXRfMjE5OyBcCisgIF9fcmV0XzIxOSA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92c2hsbF9uX3U4KF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjBfMjE5KSwgX19wMV8yMTkpKTsgXAorICBfX3JldF8yMTkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMTksIF9fcmV0XzIxOSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjE5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hsbF9oaWdoX25fdTMyKF9fcDBfMjIwLCBfX3AxXzIyMCkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMF8yMjAgPSBfX3AwXzIyMDsgXAorICB1aW50NjR4Ml90IF9fcmV0XzIyMDsgXAorICBfX3JldF8yMjAgPSAodWludDY0eDJfdCkodnNobGxfbl91MzIodmdldF9oaWdoX3UzMihfX3MwXzIyMCksIF9fcDFfMjIwKSk7IFwKKyAgX19yZXRfMjIwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNobGxfaGlnaF9uX3UzMihfX3AwXzIyMSwgX19wMV8yMjEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczBfMjIxID0gX19wMF8yMjE7IFwKKyAgdWludDMyeDRfdCBfX3JldjBfMjIxOyAgX19yZXYwXzIyMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjIxLCBfX3MwXzIyMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldF8yMjE7IFwKKyAgX19yZXRfMjIxID0gKHVpbnQ2NHgyX3QpKF9fbm9zd2FwX3ZzaGxsX25fdTMyKF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYwXzIyMSksIF9fcDFfMjIxKSk7IFwKKyAgX19yZXRfMjIxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjIxLCBfX3JldF8yMjEsIDEsIDApOyBcCisgIF9fcmV0XzIyMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNobGxfaGlnaF9uX3UxNihfX3AwXzIyMiwgX19wMV8yMjIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OF90IF9fczBfMjIyID0gX19wMF8yMjI7IFwKKyAgdWludDMyeDRfdCBfX3JldF8yMjI7IFwKKyAgX19yZXRfMjIyID0gKHVpbnQzMng0X3QpKHZzaGxsX25fdTE2KHZnZXRfaGlnaF91MTYoX19zMF8yMjIpLCBfX3AxXzIyMikpOyBcCisgIF9fcmV0XzIyMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl91MTYoX19wMF8yMjMsIF9fcDFfMjIzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDhfdCBfX3MwXzIyMyA9IF9fcDBfMjIzOyBcCisgIHVpbnQxNng4X3QgX19yZXYwXzIyMzsgIF9fcmV2MF8yMjMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIyMywgX19zMF8yMjMsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQzMng0X3QgX19yZXRfMjIzOyBcCisgIF9fcmV0XzIyMyA9ICh1aW50MzJ4NF90KShfX25vc3dhcF92c2hsbF9uX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MF8yMjMpLCBfX3AxXzIyMykpOyBcCisgIF9fcmV0XzIyMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIyMywgX19yZXRfMjIzLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMjM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl9zOChfX3AwXzIyNCwgX19wMV8yMjQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2X3QgX19zMF8yMjQgPSBfX3AwXzIyNDsgXAorICBpbnQxNng4X3QgX19yZXRfMjI0OyBcCisgIF9fcmV0XzIyNCA9IChpbnQxNng4X3QpKHZzaGxsX25fczgodmdldF9oaWdoX3M4KF9fczBfMjI0KSwgX19wMV8yMjQpKTsgXAorICBfX3JldF8yMjQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9oaWdoX25fczgoX19wMF8yMjUsIF9fcDFfMjI1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNl90IF9fczBfMjI1ID0gX19wMF8yMjU7IFwKKyAgaW50OHgxNl90IF9fcmV2MF8yMjU7ICBfX3JldjBfMjI1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yMjUsIF9fczBfMjI1LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXRfMjI1OyBcCisgIF9fcmV0XzIyNSA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3ZzaGxsX25fczgoX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MF8yMjUpLCBfX3AxXzIyNSkpOyBcCisgIF9fcmV0XzIyNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIyNSwgX19yZXRfMjI1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMjU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl9zMzIoX19wMF8yMjYsIF9fcDFfMjI2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NF90IF9fczBfMjI2ID0gX19wMF8yMjY7IFwKKyAgaW50NjR4Ml90IF9fcmV0XzIyNjsgXAorICBfX3JldF8yMjYgPSAoaW50NjR4Ml90KSh2c2hsbF9uX3MzMih2Z2V0X2hpZ2hfczMyKF9fczBfMjI2KSwgX19wMV8yMjYpKTsgXAorICBfX3JldF8yMjY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9oaWdoX25fczMyKF9fcDBfMjI3LCBfX3AxXzIyNykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwXzIyNyA9IF9fcDBfMjI3OyBcCisgIGludDMyeDRfdCBfX3JldjBfMjI3OyAgX19yZXYwXzIyNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjI3LCBfX3MwXzIyNywgMywgMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0XzIyNzsgXAorICBfX3JldF8yMjcgPSAoaW50NjR4Ml90KShfX25vc3dhcF92c2hsbF9uX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MF8yMjcpLCBfX3AxXzIyNykpOyBcCisgIF9fcmV0XzIyNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIyNywgX19yZXRfMjI3LCAxLCAwKTsgXAorICBfX3JldF8yMjc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaGxsX2hpZ2hfbl9zMTYoX19wMF8yMjgsIF9fcDFfMjI4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OF90IF9fczBfMjI4ID0gX19wMF8yMjg7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzIyODsgXAorICBfX3JldF8yMjggPSAoaW50MzJ4NF90KSh2c2hsbF9uX3MxNih2Z2V0X2hpZ2hfczE2KF9fczBfMjI4KSwgX19wMV8yMjgpKTsgXAorICBfX3JldF8yMjg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hsbF9oaWdoX25fczE2KF9fcDBfMjI5LCBfX3AxXzIyOSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDhfdCBfX3MwXzIyOSA9IF9fcDBfMjI5OyBcCisgIGludDE2eDhfdCBfX3JldjBfMjI5OyAgX19yZXYwXzIyOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjI5LCBfX3MwXzIyOSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzIyOTsgXAorICBfX3JldF8yMjkgPSAoaW50MzJ4NF90KShfX25vc3dhcF92c2hsbF9uX3MxNihfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MF8yMjkpLCBfX3AxXzIyOSkpOyBcCisgIF9fcmV0XzIyOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIyOSwgX19yZXRfMjI5LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMjk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJkX25fdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNocmRfbl91NjQoX19zMCwgX19wMSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hyZF9uX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJkX25fdTY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hyZF9uX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzaHJkX25fczY0KF9fczAsIF9fcDEpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocmRfbl9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2hyZF9uX3M2NChfX3MwLCBfX3AxKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5faGlnaF9uX3UzMihfX3AwXzIzMCwgX19wMV8yMzAsIF9fcDJfMjMwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDRfdCBfX3MwXzIzMCA9IF9fcDBfMjMwOyBcCisgIHVpbnQzMng0X3QgX19zMV8yMzAgPSBfX3AxXzIzMDsgXAorICB1aW50MTZ4OF90IF9fcmV0XzIzMDsgXAorICBfX3JldF8yMzAgPSAodWludDE2eDhfdCkodmNvbWJpbmVfdTE2KCh1aW50MTZ4NF90KShfX3MwXzIzMCksICh1aW50MTZ4NF90KSh2c2hybl9uX3UzMihfX3MxXzIzMCwgX19wMl8yMzApKSkpOyBcCisgIF9fcmV0XzIzMDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl91MzIoX19wMF8yMzEsIF9fcDFfMjMxLCBfX3AyXzIzMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0X3QgX19zMF8yMzEgPSBfX3AwXzIzMTsgXAorICB1aW50MzJ4NF90IF9fczFfMjMxID0gX19wMV8yMzE7IFwKKyAgdWludDE2eDRfdCBfX3JldjBfMjMxOyAgX19yZXYwXzIzMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjMxLCBfX3MwXzIzMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldjFfMjMxOyAgX19yZXYxXzIzMSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjMxLCBfX3MxXzIzMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldF8yMzE7IFwKKyAgX19yZXRfMjMxID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UxNigodWludDE2eDRfdCkoX19yZXYwXzIzMSksICh1aW50MTZ4NF90KShfX25vc3dhcF92c2hybl9uX3UzMihfX3JldjFfMjMxLCBfX3AyXzIzMSkpKSk7IFwKKyAgX19yZXRfMjMxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjMxLCBfX3JldF8yMzEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIzMTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5faGlnaF9uX3U2NChfX3AwXzIzMiwgX19wMV8yMzIsIF9fcDJfMjMyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJfdCBfX3MwXzIzMiA9IF9fcDBfMjMyOyBcCisgIHVpbnQ2NHgyX3QgX19zMV8yMzIgPSBfX3AxXzIzMjsgXAorICB1aW50MzJ4NF90IF9fcmV0XzIzMjsgXAorICBfX3JldF8yMzIgPSAodWludDMyeDRfdCkodmNvbWJpbmVfdTMyKCh1aW50MzJ4Ml90KShfX3MwXzIzMiksICh1aW50MzJ4Ml90KSh2c2hybl9uX3U2NChfX3MxXzIzMiwgX19wMl8yMzIpKSkpOyBcCisgIF9fcmV0XzIzMjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl91NjQoX19wMF8yMzMsIF9fcDFfMjMzLCBfX3AyXzIzMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMngyX3QgX19zMF8yMzMgPSBfX3AwXzIzMzsgXAorICB1aW50NjR4Ml90IF9fczFfMjMzID0gX19wMV8yMzM7IFwKKyAgdWludDMyeDJfdCBfX3JldjBfMjMzOyAgX19yZXYwXzIzMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjMzLCBfX3MwXzIzMywgMSwgMCk7IFwKKyAgdWludDY0eDJfdCBfX3JldjFfMjMzOyAgX19yZXYxXzIzMyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjMzLCBfX3MxXzIzMywgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldF8yMzM7IFwKKyAgX19yZXRfMjMzID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3UzMigodWludDMyeDJfdCkoX19yZXYwXzIzMyksICh1aW50MzJ4Ml90KShfX25vc3dhcF92c2hybl9uX3U2NChfX3JldjFfMjMzLCBfX3AyXzIzMykpKSk7IFwKKyAgX19yZXRfMjMzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjMzLCBfX3JldF8yMzMsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIzMzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5faGlnaF9uX3UxNihfX3AwXzIzNCwgX19wMV8yMzQsIF9fcDJfMjM0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMjM0ID0gX19wMF8yMzQ7IFwKKyAgdWludDE2eDhfdCBfX3MxXzIzNCA9IF9fcDFfMjM0OyBcCisgIHVpbnQ4eDE2X3QgX19yZXRfMjM0OyBcCisgIF9fcmV0XzIzNCA9ICh1aW50OHgxNl90KSh2Y29tYmluZV91OCgodWludDh4OF90KShfX3MwXzIzNCksICh1aW50OHg4X3QpKHZzaHJuX25fdTE2KF9fczFfMjM0LCBfX3AyXzIzNCkpKSk7IFwKKyAgX19yZXRfMjM0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnNocm5faGlnaF9uX3UxNihfX3AwXzIzNSwgX19wMV8yMzUsIF9fcDJfMjM1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OF90IF9fczBfMjM1ID0gX19wMF8yMzU7IFwKKyAgdWludDE2eDhfdCBfX3MxXzIzNSA9IF9fcDFfMjM1OyBcCisgIHVpbnQ4eDhfdCBfX3JldjBfMjM1OyAgX19yZXYwXzIzNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjM1LCBfX3MwXzIzNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDhfdCBfX3JldjFfMjM1OyAgX19yZXYxXzIzNSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjM1LCBfX3MxXzIzNSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgdWludDh4MTZfdCBfX3JldF8yMzU7IFwKKyAgX19yZXRfMjM1ID0gKHVpbnQ4eDE2X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3U4KCh1aW50OHg4X3QpKF9fcmV2MF8yMzUpLCAodWludDh4OF90KShfX25vc3dhcF92c2hybl9uX3UxNihfX3JldjFfMjM1LCBfX3AyXzIzNSkpKSk7IFwKKyAgX19yZXRfMjM1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjM1LCBfX3JldF8yMzUsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzIzNTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNocm5faGlnaF9uX3MzMihfX3AwXzIzNiwgX19wMV8yMzYsIF9fcDJfMjM2KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NF90IF9fczBfMjM2ID0gX19wMF8yMzY7IFwKKyAgaW50MzJ4NF90IF9fczFfMjM2ID0gX19wMV8yMzY7IFwKKyAgaW50MTZ4OF90IF9fcmV0XzIzNjsgXAorICBfX3JldF8yMzYgPSAoaW50MTZ4OF90KSh2Y29tYmluZV9zMTYoKGludDE2eDRfdCkoX19zMF8yMzYpLCAoaW50MTZ4NF90KSh2c2hybl9uX3MzMihfX3MxXzIzNiwgX19wMl8yMzYpKSkpOyBcCisgIF9fcmV0XzIzNjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl9zMzIoX19wMF8yMzcsIF9fcDFfMjM3LCBfX3AyXzIzNykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDRfdCBfX3MwXzIzNyA9IF9fcDBfMjM3OyBcCisgIGludDMyeDRfdCBfX3MxXzIzNyA9IF9fcDFfMjM3OyBcCisgIGludDE2eDRfdCBfX3JldjBfMjM3OyAgX19yZXYwXzIzNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjM3LCBfX3MwXzIzNywgMywgMiwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV2MV8yMzc7ICBfX3JldjFfMjM3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yMzcsIF9fczFfMjM3LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXRfMjM3OyBcCisgIF9fcmV0XzIzNyA9IChpbnQxNng4X3QpKF9fbm9zd2FwX3Zjb21iaW5lX3MxNigoaW50MTZ4NF90KShfX3JldjBfMjM3KSwgKGludDE2eDRfdCkoX19ub3N3YXBfdnNocm5fbl9zMzIoX19yZXYxXzIzNywgX19wMl8yMzcpKSkpOyBcCisgIF9fcmV0XzIzNyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzIzNywgX19yZXRfMjM3LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldF8yMzc7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl9zNjQoX19wMF8yMzgsIF9fcDFfMjM4LCBfX3AyXzIzOCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJfdCBfX3MwXzIzOCA9IF9fcDBfMjM4OyBcCisgIGludDY0eDJfdCBfX3MxXzIzOCA9IF9fcDFfMjM4OyBcCisgIGludDMyeDRfdCBfX3JldF8yMzg7IFwKKyAgX19yZXRfMjM4ID0gKGludDMyeDRfdCkodmNvbWJpbmVfczMyKChpbnQzMngyX3QpKF9fczBfMjM4KSwgKGludDMyeDJfdCkodnNocm5fbl9zNjQoX19zMV8yMzgsIF9fcDJfMjM4KSkpKTsgXAorICBfX3JldF8yMzg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9oaWdoX25fczY0KF9fcDBfMjM5LCBfX3AxXzIzOSwgX19wMl8yMzkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyX3QgX19zMF8yMzkgPSBfX3AwXzIzOTsgXAorICBpbnQ2NHgyX3QgX19zMV8yMzkgPSBfX3AxXzIzOTsgXAorICBpbnQzMngyX3QgX19yZXYwXzIzOTsgIF9fcmV2MF8yMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzIzOSwgX19zMF8yMzksIDEsIDApOyBcCisgIGludDY0eDJfdCBfX3JldjFfMjM5OyAgX19yZXYxXzIzOSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjM5LCBfX3MxXzIzOSwgMSwgMCk7IFwKKyAgaW50MzJ4NF90IF9fcmV0XzIzOTsgXAorICBfX3JldF8yMzkgPSAoaW50MzJ4NF90KShfX25vc3dhcF92Y29tYmluZV9zMzIoKGludDMyeDJfdCkoX19yZXYwXzIzOSksIChpbnQzMngyX3QpKF9fbm9zd2FwX3ZzaHJuX25fczY0KF9fcmV2MV8yMzksIF9fcDJfMjM5KSkpKTsgXAorICBfX3JldF8yMzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yMzksIF9fcmV0XzIzOSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjM5OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2hybl9oaWdoX25fczE2KF9fcDBfMjQwLCBfX3AxXzI0MCwgX19wMl8yNDApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzI0MCA9IF9fcDBfMjQwOyBcCisgIGludDE2eDhfdCBfX3MxXzI0MCA9IF9fcDFfMjQwOyBcCisgIGludDh4MTZfdCBfX3JldF8yNDA7IFwKKyAgX19yZXRfMjQwID0gKGludDh4MTZfdCkodmNvbWJpbmVfczgoKGludDh4OF90KShfX3MwXzI0MCksIChpbnQ4eDhfdCkodnNocm5fbl9zMTYoX19zMV8yNDAsIF9fcDJfMjQwKSkpKTsgXAorICBfX3JldF8yNDA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c2hybl9oaWdoX25fczE2KF9fcDBfMjQxLCBfX3AxXzI0MSwgX19wMl8yNDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDhfdCBfX3MwXzI0MSA9IF9fcDBfMjQxOyBcCisgIGludDE2eDhfdCBfX3MxXzI0MSA9IF9fcDFfMjQxOyBcCisgIGludDh4OF90IF9fcmV2MF8yNDE7ICBfX3JldjBfMjQxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNDEsIF9fczBfMjQxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng4X3QgX19yZXYxXzI0MTsgIF9fcmV2MV8yNDEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzI0MSwgX19zMV8yNDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDh4MTZfdCBfX3JldF8yNDE7IFwKKyAgX19yZXRfMjQxID0gKGludDh4MTZfdCkoX19ub3N3YXBfdmNvbWJpbmVfczgoKGludDh4OF90KShfX3JldjBfMjQxKSwgKGludDh4OF90KShfX25vc3dhcF92c2hybl9uX3MxNihfX3JldjFfMjQxLCBfX3AyXzI0MSkpKSk7IFwKKyAgX19yZXRfMjQxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjQxLCBfX3JldF8yNDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzI0MTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaWRfbl91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpZF9uX3U2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNsaWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlkX25fczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NF90IF9fczAgPSBfX3AwOyBcCisgIGludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c2xpZF9uX3M2NChfX3MwLCBfX3MxLCBfX3AyKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNsaV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgxX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDFfdCkgX19idWlsdGluX25lb25fdnNsaV9uX3YoKGludDh4OF90KV9fczAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzbGlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzbGlxX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c2xpcV9uX3YoKGludDh4MTZfdClfX3MwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDM4KTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzbGlxX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNsaXFfbl92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgX19wMiwgMzgpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDhfdCB2c3FhZGRiX3U4KHVpbnQ4X3QgX19wMCwgdWludDhfdCBfX3AxKSB7CisgIHVpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZGJfdTgoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4X3QgdnNxYWRkYl91OCh1aW50OF90IF9fcDAsIHVpbnQ4X3QgX19wMSkgeworICB1aW50OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRiX3U4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMl90IHZzcWFkZHNfdTMyKHVpbnQzMl90IF9fcDAsIHVpbnQzMl90IF9fcDEpIHsKKyAgdWludDMyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRzX3UzMihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyX3QgdnNxYWRkc191MzIodWludDMyX3QgX19wMCwgdWludDMyX3QgX19wMSkgeworICB1aW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHNfdTMyKF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZzcWFkZGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0X3QgdnNxYWRkZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNl90IHZzcWFkZGhfdTE2KHVpbnQxNl90IF9fcDAsIHVpbnQxNl90IF9fcDEpIHsKKyAgdWludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRoX3UxNihfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2X3QgdnNxYWRkaF91MTYodWludDE2X3QgX19wMCwgdWludDE2X3QgX19wMSkgeworICB1aW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZGhfdTE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnNxYWRkcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDQ4KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2c3FhZGRxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ4KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnNxYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnNxYWRkcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkgX19idWlsdGluX25lb25fdnNxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgNTApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2c3FhZGRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDUxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2c3FhZGRxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZzcWFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNDkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZzcWFkZHFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDQ5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2c3FhZGRfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZzcWFkZF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDh4OF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZzcWFkZF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDJfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnNxYWRkX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxOCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZzcWFkZF91NjQodWludDY0eDFfdCBfX3AwLCB1aW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgxX3QgdnNxYWRkX3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZzcWFkZF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDE2eDRfdCkgX19idWlsdGluX25lb25fdnNxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnNxYWRkX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3FhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAxNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2c3FydHFfZjY0KGZsb2F0NjR4Ml90IF9fcDApIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FydHFfdigoaW50OHgxNl90KV9fcDAsIDQyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnNxcnRxX2Y2NChmbG9hdDY0eDJfdCBfX3AwKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2c3FydHFfZjMyKGZsb2F0MzJ4NF90IF9fcDApIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fbmVvbl92c3FydHFfdigoaW50OHgxNl90KV9fcDAsIDQxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMng0X3QgdnNxcnRxX2YzMihmbG9hdDMyeDRfdCBfX3AwKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0cV92KChpbnQ4eDE2X3QpX19yZXYwLCA0MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2c3FydF9mNjQoZmxvYXQ2NHgxX3QgX19wMCkgeworICBmbG9hdDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcXJ0X3YoKGludDh4OF90KV9fcDAsIDEwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgxX3QgdnNxcnRfZjY0KGZsb2F0NjR4MV90IF9fcDApIHsKKyAgZmxvYXQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3FydF92KChpbnQ4eDhfdClfX3AwLCAxMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnNxcnRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92c3FydF92KChpbnQ4eDhfdClfX3AwLCA5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnNxcnRfZjMyKGZsb2F0MzJ4Ml90IF9fcDApIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX25lb25fdnNxcnRfdigoaW50OHg4X3QpX19yZXYwLCA5KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmFkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNyYWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmFkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JhZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNyYWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JhZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNyYWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlkX25fdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjRfdCBfX3MwID0gX19wMDsgXAorICB1aW50NjRfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjRfdCBfX3JldDsgXAorICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnNyaWRfbl91NjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpZF9uX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDY0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlkX25fdTY0KF9fczAsIF9fczEsIF9fcDIpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNyaWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpZF9uX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjRfdCBfX3MwID0gX19wMDsgXAorICBpbnQ2NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnNyaWRfbl9zNjQoX19zMCwgX19zMSwgX19wMik7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzcmlfbl9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxX3QgX19zMCA9IF9fcDA7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MV90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Zzcmlfbl92KChpbnQ4eDhfdClfX3MwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpX25fcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczAgPSBfX3AwOyBcCisgIHBvbHk2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDFfdCBfX3JldDsgXAorICBfX3JldCA9IChwb2x5NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92c3JpX25fdigoaW50OHg4X3QpX19zMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDYpOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3JpcV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSAocG9seTY0eDJfdCkgX19idWlsdGluX25lb25fdnNyaXFfbl92KChpbnQ4eDE2X3QpX19zMCwgKGludDh4MTZfdClfX3MxLCBfX3AyLCAzOCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3JpcV9uX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwID0gX19wMDsgXAorICBwb2x5NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBwb2x5NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3ZzcmlxX25fdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM4KTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3YoX19wMCwgKGludDh4OF90KV9fczEsIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMSwgX19wMiwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMSwgX19wMiwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEsIF9fcDIsIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEsIF9fcDIsIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEsIF9fcDIsIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLCBfX3AyLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfcDY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wOF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdThfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA1MCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3U2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgMzIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2Y2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA0MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgNDApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgNDApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3MxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDMzKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3MxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4OHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U4X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHg4eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdThfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAxNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfdTMyX3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3UzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMTgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3U2NF94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91NjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91MTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIDE3KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDR4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfczhfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHg4eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjY0X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMzJfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDJfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gyX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjE2X3gyKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mMTZfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MzMl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zNjRfeDIoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94Ml92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgMSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3MxNl94MihfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NHgyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDJfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCAxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCA0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9wMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3AxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHkxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9wNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3A2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3AxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDM3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdThfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDQ4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50OHgxNngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCA1MCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91MzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91NjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNDkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTE2X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDQ5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczhfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfZjY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9mMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA0MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9mMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQzMng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA0MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX2YxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDNfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDM0KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3MzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MzJ4NHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMzQpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV9zNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfczY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3MxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91OF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDE2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdThfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDh4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3UzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91NjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91NjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMTkpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3UxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIDE3KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9zOF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHg4eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3M4X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4M190IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHgzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mNjRfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCA5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfZjMyX3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0MzJ4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDNfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCA5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV9mMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQxNng0eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MzMl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJ4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zMzJfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczY0X3gzKF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3M2NF94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3MxNl94MyhfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZ4NHgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94M192KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zMTZfeDMoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4M190IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3gzX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDQpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgNCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfcDY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3A2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3AxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9wMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5MTZ4NHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3A4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wOF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfcDY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9wNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3AxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgMzcpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfcDE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgMzcpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91OF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdThfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3UzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgNTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MXFfdTMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgNTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxcV91NjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3U2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfdTE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MTZ4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCA0OSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV91MTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCA0OSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFxX3M4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX3M4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MXFfeDRfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2Y2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDQxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDQxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfZjE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDQwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFxX2YxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDQwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzNCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDM0KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MXFfczE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng4eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxcV9zMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDh4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxcV94NF92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDMzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91OF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMTYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV91OF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMTYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QxX3UzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDFfdTMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDhfdClfX3JldjEudmFsWzFdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsyXSwgKGludDh4OF90KV9fcmV2MS52YWxbM10sIDE4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91NjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3U2NF94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MV91MTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCAxNyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3UxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3JldjEudmFsWzBdLCAoaW50OHg4X3QpX19yZXYxLnZhbFsxXSwgKGludDh4OF90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDhfdClfX3JldjEudmFsWzNdLCAxNyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczhfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4OHg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX3M4X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDh4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDh4OHg0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCAoaW50OHg4X3QpX19yZXYxLnZhbFswXSwgKGludDh4OF90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDhfdClfX3JldjEudmFsWzJdLCAoaW50OHg4X3QpX19yZXYxLnZhbFszXSwgMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9mNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MV94NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YzMl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgOSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfZjE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QxX2YxNl94NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczMyX3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMngyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zMzJfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczY0X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDMpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zNjRfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDFfeDRfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDFfczE2X3g0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNng0eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MV9zMTZfeDQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2eDR4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDR4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QxX3g0X3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDM4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX3M2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4MngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QyX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgX19wMiwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDM2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBwb2x5OHgxNngyX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgX19wMiwgMzYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QycV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCBfX3AyLCAzOCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QycV9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgX19wMiwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCBfX3AyLCA0OCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIF9fcDIsIDMyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDh4MTZ4Ml90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QycV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIF9fcDIsIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0MnFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngyX3QgX19zMSA9IF9fcDE7IFwKKyAgZmxvYXQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0MnFfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJxX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDM1KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDJfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0MnFfbGFuZV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcDIsIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCBfX3AyLCAxOSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIF9fcDIsIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0Ml9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDEwKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDJfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXgyX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0Ml9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3AyLCAxMCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDJfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDF4Ml90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDJfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19wMiwgMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QyX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDJfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QyX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fcDIsIDMpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M192KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIDYpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfdTY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgNDIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzcV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ2NHgyeDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfcDgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzYpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHBvbHk4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDM2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9wNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBwb2x5NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDQ4KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgX19wMiwgNTEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICB1aW50NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCBfX3AyLCA1MSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfczgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDh4MTZ4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCBfX3AyLCAzMik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzcV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDNfdCBfX3MxID0gX19wMTsgXAorICBpbnQ4eDE2eDNfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIF9fcDIsIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M3FfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MngzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M3FfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDNxX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGZsb2F0NjR4MngzX3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3AyLCA0Mik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDNxX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMzUpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M3FfbGFuZV9zNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4M190IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4M190IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzcV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19wMiwgMzUpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3QzX2xhbmVfdTY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgX19wMiwgMTkpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0M19sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIF9fcDIsIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfZjY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDF4M190IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDNfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fcDIsIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0M19sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4MXgzX3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0M19sYW5lX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19wMiwgMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3QzX2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDNfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3QzX2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3AyLCAzKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9wNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCA2KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX3A2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgMzgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfcDY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgMzgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV91NjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIDUxKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX3U2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIDUxKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfZjY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDQyKTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDQyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfczY0KF9fcDAsIF9fcDEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9zNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV92KF9fcDAsIF9fcmV2MS52YWxbMF0sIF9fcmV2MS52YWxbMV0sIF9fcmV2MS52YWxbMl0sIF9fcmV2MS52YWxbM10sIDM1KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9mNjQoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCAxMCk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2Y2NChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X3YoX19wMCwgX19zMS52YWxbMF0sIF9fczEudmFsWzFdLCBfX3MxLnZhbFsyXSwgX19zMS52YWxbM10sIDEwKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX3A2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDF4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRfbGFuZV92KF9fcDAsIChpbnQ4eDhfdClfX3MxLnZhbFswXSwgKGludDh4OF90KV9fczEudmFsWzFdLCAoaW50OHg4X3QpX19zMS52YWxbMl0sIChpbnQ4eDhfdClfX3MxLnZhbFszXSwgX19wMiwgNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MXg0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NF9sYW5lX3YoX19wMCwgKGludDh4OF90KV9fczEudmFsWzBdLCAoaW50OHg4X3QpX19zMS52YWxbMV0sIChpbnQ4eDhfdClfX3MxLnZhbFsyXSwgKGludDh4OF90KV9fczEudmFsWzNdLCBfX3AyLCA2KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV9wOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCAzNik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3A4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTh4MTZ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzNik7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19zMS52YWxbMF0sIChpbnQ4eDE2X3QpX19zMS52YWxbMV0sIChpbnQ4eDE2X3QpX19zMS52YWxbMl0sIChpbnQ4eDE2X3QpX19zMS52YWxbM10sIF9fcDIsIDM4KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRxX2xhbmVfcDY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgcG9seTY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3JldjEudmFsWzBdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMV0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsyXSwgKGludDh4MTZfdClfX3JldjEudmFsWzNdLCBfX3AyLCAzOCk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRxX2xhbmVfdTgoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgNDgpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV91OChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDh4MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ4eDE2eDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNDgpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fczEudmFsWzBdLCAoaW50OHgxNl90KV9fczEudmFsWzFdLCAoaW50OHgxNl90KV9fczEudmFsWzJdLCAoaW50OHgxNl90KV9fczEudmFsWzNdLCBfX3AyLCA1MSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3U2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQ2NHgyeDRfdCBfX3JldjE7IFwKKyAgX19yZXYxLnZhbFswXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzBdLCBfX3MxLnZhbFswXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsxXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzFdLCBfX3MxLnZhbFsxXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFsyXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzJdLCBfX3MxLnZhbFsyXSwgMSwgMCk7IFwKKyAgX19yZXYxLnZhbFszXSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEudmFsWzNdLCBfX3MxLnZhbFszXSwgMSwgMCk7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIChpbnQ4eDE2X3QpX19yZXYxLnZhbFswXSwgKGludDh4MTZfdClfX3JldjEudmFsWzFdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMl0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFszXSwgX19wMiwgNTEpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3M4KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ4eDE2eDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgKGludDh4MTZfdClfX3MxLnZhbFswXSwgKGludDh4MTZfdClfX3MxLnZhbFsxXSwgKGludDh4MTZfdClfX3MxLnZhbFsyXSwgKGludDh4MTZfdClfX3MxLnZhbFszXSwgX19wMiwgMzIpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NHFfbGFuZV9zOChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50OHgxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50OHgxNng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCAoaW50OHgxNl90KV9fcmV2MS52YWxbMF0sIChpbnQ4eDE2X3QpX19yZXYxLnZhbFsxXSwgKGludDh4MTZfdClfX3JldjEudmFsWzJdLCAoaW50OHgxNl90KV9fcmV2MS52YWxbM10sIF9fcDIsIDMyKTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NHFfbGFuZV9mNjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCA0Mik7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyeDRfdCBfX3MxID0gX19wMTsgXAorICBmbG9hdDY0eDJ4NF90IF9fcmV2MTsgXAorICBfX3JldjEudmFsWzBdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMF0sIF9fczEudmFsWzBdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzFdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMV0sIF9fczEudmFsWzFdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzJdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbMl0sIF9fczEudmFsWzJdLCAxLCAwKTsgXAorICBfX3JldjEudmFsWzNdID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMS52YWxbM10sIF9fczEudmFsWzNdLCAxLCAwKTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0cV9sYW5lX3YoX19wMCwgX19yZXYxLnZhbFswXSwgX19yZXYxLnZhbFsxXSwgX19yZXYxLnZhbFsyXSwgX19yZXYxLnZhbFszXSwgX19wMiwgNDIpOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgX19idWlsdGluX25lb25fdnN0NHFfbGFuZV92KF9fcDAsIF9fczEudmFsWzBdLCBfX3MxLnZhbFsxXSwgX19zMS52YWxbMl0sIF9fczEudmFsWzNdLCBfX3AyLCAzNSk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0cV9sYW5lX3M2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Mng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50NjR4Mng0X3QgX19yZXYxOyBcCisgIF9fcmV2MS52YWxbMF0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFswXSwgX19zMS52YWxbMF0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMV0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsxXSwgX19zMS52YWxbMV0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbMl0gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFsyXSwgX19zMS52YWxbMl0sIDEsIDApOyBcCisgIF9fcmV2MS52YWxbM10gPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLnZhbFszXSwgX19zMS52YWxbM10sIDEsIDApOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdDRxX2xhbmVfdihfX3AwLCBfX3JldjEudmFsWzBdLCBfX3JldjEudmFsWzFdLCBfX3JldjEudmFsWzJdLCBfX3JldjEudmFsWzNdLCBfX3AyLCAzNSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdDRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE5KTsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzdDRfbGFuZV91NjQoX19wMCwgX19wMSwgX19wMikgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCAoaW50OHg4X3QpX19zMS52YWxbMF0sIChpbnQ4eDhfdClfX3MxLnZhbFsxXSwgKGludDh4OF90KV9fczEudmFsWzJdLCAoaW50OHg4X3QpX19zMS52YWxbM10sIF9fcDIsIDE5KTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnN0NF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMTApOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0NF9sYW5lX2Y2NChfX3AwLCBfX3AxLCBfX3AyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMTApOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c3Q0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMyk7IFwKK30pCisjZWxzZQorI2RlZmluZSB2c3Q0X2xhbmVfczY0KF9fcDAsIF9fcDEsIF9fcDIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgxeDRfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3Q0X2xhbmVfdihfX3AwLCBfX3MxLnZhbFswXSwgX19zMS52YWxbMV0sIF9fczEudmFsWzJdLCBfX3MxLnZhbFszXSwgX19wMiwgMyk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZzdHJxX3AxMjgoX19wMCwgX19wMSkgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHkxMjhfdCBfX3MxID0gX19wMTsgXAorICBfX2J1aWx0aW5fbmVvbl92c3RycV9wMTI4KF9fcDAsIF9fczEpOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnN0cnFfcDEyOChfX3AwLCBfX3AxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTEyOF90IF9fczEgPSBfX3AxOyBcCisgIF9fYnVpbHRpbl9uZW9uX3ZzdHJxX3AxMjgoX19wMCwgX19zMSk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NF90IHZzdWJkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnN1YmRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjRfdCB2c3ViZF91NjQodWludDY0X3QgX19wMCwgdWludDY0X3QgX19wMSkgeworICB1aW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJkX3U2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NF90IHZzdWJkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92c3ViZF9zNjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0X3QgdnN1YmRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3ZzdWJkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDJfdCB2c3VicV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19wMTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnN1YnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX3JldjE7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDY0eDFfdCB2c3ViX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDFfdCB2c3ViX2Y2NChmbG9hdDY0eDFfdCBfX3AwLCBmbG9hdDY0eDFfdCBfX3AxKSB7CisgIGZsb2F0NjR4MV90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX3AxOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnN1YmhuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2Y29tYmluZV91MTYoX19wMCwgdnN1YmhuX3UzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnN1YmhuX2hpZ2hfdTMyKHVpbnQxNng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV91MTYoX19yZXYwLCBfX25vc3dhcF92c3ViaG5fdTMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJobl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTMyKF9fcDAsIHZzdWJobl91NjQoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZzdWJobl9oaWdoX3U2NCh1aW50MzJ4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSwgdWludDY0eDJfdCBfX3AyKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTMyKF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3U2NChfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2c3ViaG5faGlnaF91MTYodWludDh4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfdTgoX19wMCwgdnN1YmhuX3UxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnN1YmhuX2hpZ2hfdTE2KHVpbnQ4eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmNvbWJpbmVfdTgoX19yZXYwLCBfX25vc3dhcF92c3ViaG5fdTE2KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnN1YmhuX2hpZ2hfczMyKGludDE2eDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MxNihfX3AwLCB2c3ViaG5fczMyKF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZzdWJobl9oaWdoX3MzMihpbnQxNng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMTYoX19yZXYwLCBfX25vc3dhcF92c3ViaG5fczMyKF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnN1YmhuX2hpZ2hfczY0KGludDMyeDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSwgaW50NjR4Ml90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZjb21iaW5lX3MzMihfX3AwLCB2c3ViaG5fczY0KF9fcDEsIF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJobl9oaWdoX3M2NChpbnQzMngyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEsIGludDY0eDJfdCBfX3AyKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92Y29tYmluZV9zMzIoX19yZXYwLCBfX25vc3dhcF92c3ViaG5fczY0KF9fcmV2MSwgX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnN1YmhuX2hpZ2hfczE2KGludDh4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNng4X3QgX19wMikgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gdmNvbWJpbmVfczgoX19wMCwgdnN1YmhuX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2c3ViaG5faGlnaF9zMTYoaW50OHg4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zjb21iaW5lX3M4KF9fcmV2MCwgX19ub3N3YXBfdnN1YmhuX3MxNihfX3JldjEsIF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3VibF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF91OChfX3AwKSAtIHZtb3ZsX2hpZ2hfdTgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnN1YmxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTgoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnN1YmxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3UzMihfX3AwKSAtIHZtb3ZsX2hpZ2hfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZzdWJsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF91MzIoX19yZXYwKSAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZzdWJsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF91MTYoX19wMCkgLSB2bW92bF9oaWdoX3UxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c3VibF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTE2KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZzdWJsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3M4KF9fcDApIC0gdm1vdmxfaGlnaF9zOChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZzdWJsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF9zOChfX3JldjApIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZzdWJsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF9zMzIoX19wMCkgLSB2bW92bF9oaWdoX3MzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZzdWJsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczMyKF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9oaWdoX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZzdWJsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF9zMTYoX19wMCkgLSB2bW92bF9oaWdoX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZzdWJsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KF9fcmV2MCkgLSBfX25vc3dhcF92bW92bF9oaWdoX3MxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2c3Vid19oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX2hpZ2hfdTgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnN1YndfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnN1YndfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfaGlnaF91MzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnN1YndfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9oaWdoX3UzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2c3Vid19oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9oaWdoX3UxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2c3Vid19oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnN1YndfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bW92bF9oaWdoX3M4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnN1YndfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9oaWdoX3M4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnN1YndfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm1vdmxfaGlnaF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2c3Vid19oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bW92bF9oaWdoX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZzdWJ3X2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtb3ZsX2hpZ2hfczE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnN1YndfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dHJuMV9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRybjFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2dHJuMV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAyLCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2dHJuMV9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZ0cm4xcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDE2LCAyLCAxOCwgNCwgMjAsIDYsIDIyLCA4LCAyNCwgMTAsIDI2LCAxMiwgMjgsIDE0LCAzMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnRybjFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDE2LCAyLCAxOCwgNCwgMjAsIDYsIDIyLCA4LCAyNCwgMTAsIDI2LCAxMiwgMjgsIDE0LCAzMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZ0cm4xcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2dHJuMXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2dHJuMXFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnRybjFxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnRybjFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMTYsIDIsIDE4LCA0LCAyMCwgNiwgMjIsIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2dHJuMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMTYsIDIsIDE4LCA0LCAyMCwgNiwgMjIsIDgsIDI0LCAxMCwgMjYsIDEyLCAyOCwgMTQsIDMwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnRybjFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ0cm4xcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMiwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ0cm4xcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2dHJuMXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2dHJuMXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnRybjFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2dHJuMXFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAxNiwgMiwgMTgsIDQsIDIwLCA2LCAyMiwgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnRybjFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAxNiwgMiwgMTgsIDQsIDIwLCA2LCAyMiwgOCwgMjQsIDEwLCAyNiwgMTIsIDI4LCAxNCwgMzApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnRybjFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2dHJuMXFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2dHJuMXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMiwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZ0cm4xcV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAyLCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2dHJuMXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgNCwgMiwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2dHJuMXFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAyLCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2dHJuMXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2dHJuMXFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2dHJuMXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2dHJuMXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAyLCAxMCwgNCwgMTIsIDYsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dHJuMV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRybjFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDIsIDEwLCA0LCAxMiwgNiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2dHJuMV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2dHJuMV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ0cm4xX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ0cm4xX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAyLCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ0cm4xX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0cm4xX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMiwgMTAsIDQsIDEyLCA2LCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2dHJuMV9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnRybjFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnRybjFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2dHJuMV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZ0cm4xX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDIsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnRybjFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAyLCA2KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDhfdCB2dHJuMl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnRybjJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2dHJuMl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCA1LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2dHJuMl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZ0cm4ycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDE3LCAzLCAxOSwgNSwgMjEsIDcsIDIzLCA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnRybjJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDE3LCAzLCAxOSwgNSwgMjEsIDcsIDIzLCA5LCAyNSwgMTEsIDI3LCAxMywgMjksIDE1LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZ0cm4ycV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2dHJuMnFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2dHJuMnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng4X3QgdnRybjJxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnRybjJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMTcsIDMsIDE5LCA1LCAyMSwgNywgMjMsIDksIDI1LCAxMSwgMjcsIDEzLCAyOSwgMTUsIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2dHJuMnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMTcsIDMsIDE5LCA1LCAyMSwgNywgMjMsIDksIDI1LCAxMSwgMjcsIDEzLCAyOSwgMTUsIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnRybjJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDUsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ0cm4ycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgNSwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ0cm4ycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2dHJuMnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2dHJuMnFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnRybjJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2dHJuMnFfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAxNywgMywgMTksIDUsIDIxLCA3LCAyMywgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDE2X3QgdnRybjJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAxNywgMywgMTksIDUsIDIxLCA3LCAyMywgOSwgMjUsIDExLCAyNywgMTMsIDI5LCAxNSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQ2NHgyX3QgdnRybjJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDY0eDJfdCB2dHJuMnFfZjY0KGZsb2F0NjR4Ml90IF9fcDAsIGZsb2F0NjR4Ml90IF9fcDEpIHsKKyAgZmxvYXQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDRfdCB2dHJuMnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgNSwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4NF90IHZ0cm4ycV9mMzIoZmxvYXQzMng0X3QgX19wMCwgZmxvYXQzMng0X3QgX19wMSkgeworICBmbG9hdDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgZmxvYXQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA1LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2dHJuMnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgNSwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2dHJuMnFfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA1LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2dHJuMnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2dHJuMnFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2dHJuMnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2dHJuMnFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA5LCAzLCAxMSwgNSwgMTMsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2dHJuMl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHg4X3QgdnRybjJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDksIDMsIDExLCA1LCAxMywgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2dHJuMl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2dHJuMl91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ0cm4yX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDUsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ0cm4yX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA1LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ0cm4yX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ0cm4yX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgOSwgMywgMTEsIDUsIDEzLCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBmbG9hdDMyeDJfdCB2dHJuMl9mMzIoZmxvYXQzMngyX3QgX19wMCwgZmxvYXQzMngyX3QgX19wMSkgeworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQzMngyX3QgdnRybjJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdnRybjJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDJfdCB2dHJuMl9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZ0cm4yX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDUsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng0X3QgdnRybjJfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCA1LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgxX3QgdnRzdF9wNjQocG9seTY0eDFfdCBfX3AwLCBwb2x5NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZ0c3RfcDY0KHBvbHk2NHgxX3QgX19wMCwgcG9seTY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ0c3RxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnRzdHFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ0c3RxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dHN0cV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCA1MSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnRzdHFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ0c3RxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkgX19idWlsdGluX25lb25fdnRzdHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgNTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ0c3RxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCA1MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4MV90IHZ0c3RfdTY0KHVpbnQ2NHgxX3QgX19wMCwgdWludDY0eDFfdCBfX3AxKSB7CisgIHVpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDE5KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDFfdCB2dHN0X3U2NCh1aW50NjR4MV90IF9fcDAsIHVpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDFfdCB2dHN0X3M2NChpbnQ2NHgxX3QgX19wMCwgaW50NjR4MV90IF9fcDEpIHsKKyAgdWludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDFfdCkgX19idWlsdGluX25lb25fdnRzdF92KChpbnQ4eDhfdClfX3AwLCAoaW50OHg4X3QpX19wMSwgMTkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4MV90IHZ0c3RfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICB1aW50NjR4MV90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dHN0X3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxOSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0X3QgdnRzdGRfdTY0KHVpbnQ2NF90IF9fcDAsIHVpbnQ2NF90IF9fcDEpIHsKKyAgdWludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92dHN0ZF91NjQoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NF90IHZ0c3RkX3U2NCh1aW50NjRfdCBfX3AwLCB1aW50NjRfdCBfX3AxKSB7CisgIHVpbnQ2NF90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjRfdCkgX19idWlsdGluX25lb25fdnRzdGRfdTY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0X3QgdnRzdGRfczY0KGludDY0X3QgX19wMCwgaW50NjRfdCBfX3AxKSB7CisgIGludDY0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0X3QpIF9fYnVpbHRpbl9uZW9uX3Z0c3RkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2dHN0ZF9zNjQoaW50NjRfdCBfX3AwLCBpbnQ2NF90IF9fcDEpIHsKKyAgaW50NjRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjRfdCkgX19idWlsdGluX25lb25fdnRzdGRfczY0KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDhfdCB2dXFhZGRiX3M4KGludDhfdCBfX3AwLCBpbnQ4X3QgX19wMSkgeworICBpbnQ4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDhfdCkgX19idWlsdGluX25lb25fdnVxYWRkYl9zOChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OF90IHZ1cWFkZGJfczgoaW50OF90IF9fcDAsIGludDhfdCBfX3AxKSB7CisgIGludDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRiX3M4KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyX3QgdnVxYWRkc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnVxYWRkc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyX3QgdnVxYWRkc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJfdCkgX19idWlsdGluX25lb25fdnVxYWRkc19zMzIoX19wMCwgX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjRfdCB2dXFhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjRfdCB2dXFhZGRkX3M2NChpbnQ2NF90IF9fcDAsIGludDY0X3QgX19wMSkgeworICBpbnQ2NF90IF9fcmV0OworICBfX3JldCA9IChpbnQ2NF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRkX3M2NChfX3AwLCBfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNl90IHZ1cWFkZGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZ1cWFkZGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxKSB7CisgIGludDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZGhfczE2KF9fcDAsIF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4MTZfdCB2dXFhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDh4MTZfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4MTZfdCB2dXFhZGRxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2dXFhZGRxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcDAsIChpbnQ4eDE2X3QpX19wMSwgMzQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnVxYWRkcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDMyeDRfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19yZXYwLCAoaW50OHgxNl90KV9fcmV2MSwgMzQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZ1cWFkZHFfczY0KGludDY0eDJfdCBfX3AwLCBpbnQ2NHgyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkgX19idWlsdGluX25lb25fdnVxYWRkcV92KChpbnQ4eDE2X3QpX19wMCwgKGludDh4MTZfdClfX3AxLCAzNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2dXFhZGRxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3JldjAsIChpbnQ4eDE2X3QpX19yZXYxLCAzNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnVxYWRkcV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRxX3YoKGludDh4MTZfdClfX3AwLCAoaW50OHgxNl90KV9fcDEsIDMzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZ1cWFkZHFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZHFfdigoaW50OHgxNl90KV9fcmV2MCwgKGludDh4MTZfdClfX3JldjEsIDMzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ1cWFkZF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IChpbnQ4eDhfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnVxYWRkX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9uZW9uX3Z1cWFkZF92KChpbnQ4eDhfdClfX3JldjAsIChpbnQ4eDhfdClfX3JldjEsIDApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZ1cWFkZF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnVxYWRkX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19yZXYwLCAoaW50OHg4X3QpX19yZXYxLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDFfdCB2dXFhZGRfczY0KGludDY0eDFfdCBfX3AwLCBpbnQ2NHgxX3QgX19wMSkgeworICBpbnQ2NHgxX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDFfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4MV90IHZ1cWFkZF9zNjQoaW50NjR4MV90IF9fcDAsIGludDY0eDFfdCBfX3AxKSB7CisgIGludDY0eDFfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fbmVvbl92dXFhZGRfdigoaW50OHg4X3QpX19wMCwgKGludDh4OF90KV9fcDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2dXFhZGRfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcDAsIChpbnQ4eDhfdClfX3AxLCAxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZ1cWFkZF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDRfdCkgX19idWlsdGluX25lb25fdnVxYWRkX3YoKGludDh4OF90KV9fcmV2MCwgKGludDh4OF90KV9fcmV2MSwgMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnV6cDFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ1enAxX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnV6cDFfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnV6cDFfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2dXpwMXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzApOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZ1enAxcV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzApOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2dXpwMXFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnV6cDFxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnV6cDFxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZ1enAxcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ1enAxcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnV6cDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDIyLCAyNCwgMjYsIDI4LCAzMCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZ1enAxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2dXpwMXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2dXpwMXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnV6cDFxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnV6cDFxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ1enAxcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnV6cDFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDMwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZ1enAxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0LCAyNiwgMjgsIDMwKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZ1enAxcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnV6cDFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnV6cDFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2dXpwMXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnV6cDFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnV6cDFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnV6cDFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnV6cDFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnV6cDFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnV6cDFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNiwgOCwgMTAsIDEyLCAxNCk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnV6cDFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ1enAxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnV6cDFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnV6cDFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2dXpwMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2dXpwMV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dXpwMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dXpwMV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnV6cDFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZ1enAxX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZ1enAxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnV6cDFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2dXpwMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyLCA0LCA2KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZ1enAxX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMiwgNCwgNik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnV6cDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4OF90IHZ1enAyX3A4KHBvbHk4eDhfdCBfX3AwLCBwb2x5OHg4X3QgX19wMSkgeworICBwb2x5OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng0X3QgdnV6cDJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHkxNng0X3QgdnV6cDJfcDE2KHBvbHkxNng0X3QgX19wMCwgcG9seTE2eDRfdCBfX3AxKSB7CisgIHBvbHkxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHBvbHkxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTh4MTZfdCB2dXpwMnFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHgxNl90IHZ1enAycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTY0eDJfdCB2dXpwMnFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk2NHgyX3QgdnV6cDJxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHkxNng4X3QgdnV6cDJxX3AxNihwb2x5MTZ4OF90IF9fcDAsIHBvbHkxNng4X3QgX19wMSkgeworICBwb2x5MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZ1enAycV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHgxNl90IHZ1enAycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ4eDE2X3QgdnV6cDJxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUsIDE3LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZ1enAycV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2dXpwMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2dXpwMnFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdnV6cDJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdnV6cDJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZ1enAycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnV6cDJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjksIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZ1enAycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMSwgMjMsIDI1LCAyNywgMjksIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZ1enAycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnV6cDJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnV6cDJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2dXpwMnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnV6cDJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnV6cDJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnV6cDJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnV6cDJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnV6cDJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdnV6cDJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdnV6cDJfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ1enAyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMngyX3QgdnV6cDJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdnV6cDJfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDRfdCB2dXpwMl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2dXpwMl91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDhfdCB2dXpwMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2dXpwMl9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMsIDUsIDcsIDksIDExLCAxMywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnV6cDJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZ1enAyX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZ1enAyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnV6cDJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2dXpwMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzLCA1LCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZ1enAyX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMywgNSwgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnppcDFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5OHg4X3QgdnppcDFfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4NF90IHZ6aXAxX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4NF90IHZ6aXAxX3AxNihwb2x5MTZ4NF90IF9fcDAsIHBvbHkxNng0X3QgX19wMSkgeworICBwb2x5MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBwb2x5MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAxLCA1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk4eDE2X3QgdnppcDFxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMTYsIDEsIDE3LCAyLCAxOCwgMywgMTksIDQsIDIwLCA1LCAyMSwgNiwgMjIsIDcsIDIzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTh4MTZfdCB2emlwMXFfcDgocG9seTh4MTZfdCBfX3AwLCBwb2x5OHgxNl90IF9fcDEpIHsKKyAgcG9seTh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMTYsIDEsIDE3LCAyLCAxOCwgMywgMTksIDQsIDIwLCA1LCAyMSwgNiwgMjIsIDcsIDIzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHBvbHk2NHgyX3QgdnppcDFxX3A2NChwb2x5NjR4Ml90IF9fcDAsIHBvbHk2NHgyX3QgX19wMSkgeworICBwb2x5NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5NjR4Ml90IHZ6aXAxcV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5MTZ4OF90IHZ6aXAxcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZ6aXAxcV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdnppcDFxX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMTYsIDEsIDE3LCAyLCAxOCwgMywgMTksIDQsIDIwLCA1LCAyMSwgNiwgMjIsIDcsIDIzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2emlwMXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMTYsIDEsIDE3LCAyLCAxOCwgMywgMTksIDQsIDIwLCA1LCAyMSwgNiwgMjIsIDcsIDIzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdnppcDFxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZ6aXAxcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMSwgNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZ6aXAxcV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2emlwMXFfdTY0KHVpbnQ2NHgyX3QgX19wMCwgdWludDY0eDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2emlwMXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2emlwMXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnppcDFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMTYsIDEsIDE3LCAyLCAxOCwgMywgMTksIDQsIDIwLCA1LCAyMSwgNiwgMjIsIDcsIDIzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZ6aXAxcV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMTYsIDEsIDE3LCAyLCAxOCwgMywgMTksIDQsIDIwLCA1LCAyMSwgNiwgMjIsIDcsIDIzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZ6aXAxcV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnppcDFxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnppcDFxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2emlwMXFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMSwgNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnppcDFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnppcDFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMSwgNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnppcDFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnppcDFxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnppcDFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDgsIDEsIDksIDIsIDEwLCAzLCAxMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2emlwMXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4OF90IHZ6aXAxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ6aXAxX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDJfdCB2emlwMV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCAyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDJfdCB2emlwMV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4NF90IHZ6aXAxX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDQsIDEsIDUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4NF90IHZ6aXAxX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA0LCAxLCA1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDh4OF90IHZ6aXAxX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgOCwgMSwgOSwgMiwgMTAsIDMsIDExKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHg4X3QgdnppcDFfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCA4LCAxLCA5LCAyLCAxMCwgMywgMTEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnppcDFfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMCwgMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZ6aXAxX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDAsIDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZ6aXAxX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDAsIDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnppcDFfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAwLCAyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2emlwMV9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAwLCA0LCAxLCA1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZ6aXAxX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMCwgNCwgMSwgNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHg4X3QgdnppcDJfcDgocG9seTh4OF90IF9fcDAsIHBvbHk4eDhfdCBfX3AxKSB7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDhfdCB2emlwMl9wOChwb2x5OHg4X3QgX19wMCwgcG9seTh4OF90IF9fcDEpIHsKKyAgcG9seTh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBwb2x5OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDRfdCB2emlwMl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAyLCA2LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTE2eDRfdCB2emlwMl9wMTYocG9seTE2eDRfdCBfX3AwLCBwb2x5MTZ4NF90IF9fcDEpIHsKKyAgcG9seTE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMiwgNiwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5OHgxNl90IHZ6aXAycV9wOChwb2x5OHgxNl90IF9fcDAsIHBvbHk4eDE2X3QgX19wMSkgeworICBwb2x5OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDgsIDI0LCA5LCAyNSwgMTAsIDI2LCAxMSwgMjcsIDEyLCAyOCwgMTMsIDI5LCAxNCwgMzAsIDE1LCAzMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHBvbHk4eDE2X3QgdnppcDJxX3A4KHBvbHk4eDE2X3QgX19wMCwgcG9seTh4MTZfdCBfX3AxKSB7CisgIHBvbHk4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHBvbHk4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDgsIDI0LCA5LCAyNSwgMTAsIDI2LCAxMSwgMjcsIDEyLCAyOCwgMTMsIDI5LCAxNCwgMzAsIDE1LCAzMSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBwb2x5NjR4Ml90IHZ6aXAycV9wNjQocG9seTY0eDJfdCBfX3AwLCBwb2x5NjR4Ml90IF9fcDEpIHsKKyAgcG9seTY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgcG9seTY0eDJfdCB2emlwMnFfcDY0KHBvbHk2NHgyX3QgX19wMCwgcG9seTY0eDJfdCBfX3AxKSB7CisgIHBvbHk2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHBvbHk2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgcG9seTE2eDhfdCB2emlwMnFfcDE2KHBvbHkxNng4X3QgX19wMCwgcG9seTE2eDhfdCBfX3AxKSB7CisgIHBvbHkxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBwb2x5MTZ4OF90IHZ6aXAycV9wMTYocG9seTE2eDhfdCBfX3AwLCBwb2x5MTZ4OF90IF9fcDEpIHsKKyAgcG9seTE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcG9seTE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDh4MTZfdCB2emlwMnFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEpIHsKKyAgdWludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50OHgxNl90IHZ6aXAycV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2emlwMnFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMiwgNiwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdnppcDJxX3UzMih1aW50MzJ4NF90IF9fcDAsIHVpbnQzMng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAyLCA2LCAzLCA3KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdnppcDJxX3U2NCh1aW50NjR4Ml90IF9fcDAsIHVpbnQ2NHgyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZ6aXAycV91NjQodWludDY0eDJfdCBfX3AwLCB1aW50NjR4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZ6aXAycV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdnppcDJxX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ4eDE2X3QgdnppcDJxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSkgeworICBpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgOCwgMjQsIDksIDI1LCAxMCwgMjYsIDExLCAyNywgMTIsIDI4LCAxMywgMjksIDE0LCAzMCwgMTUsIDMxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZ6aXAycV9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgOCwgMjQsIDksIDI1LCAxMCwgMjYsIDExLCAyNywgMTIsIDI4LCAxMywgMjksIDE0LCAzMCwgMTUsIDMxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGZsb2F0NjR4Ml90IHZ6aXAycV9mNjQoZmxvYXQ2NHgyX3QgX19wMCwgZmxvYXQ2NHgyX3QgX19wMSkgeworICBmbG9hdDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAxLCAzKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgZmxvYXQ2NHgyX3QgdnppcDJxX2Y2NChmbG9hdDY0eDJfdCBfX3AwLCBmbG9hdDY0eDJfdCBfX3AxKSB7CisgIGZsb2F0NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDY0eDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMng0X3QgdnppcDJxX2YzMihmbG9hdDMyeDRfdCBfX3AwLCBmbG9hdDMyeDRfdCBfX3AxKSB7CisgIGZsb2F0MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDIsIDYsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBmbG9hdDMyeDRfdCB2emlwMnFfZjMyKGZsb2F0MzJ4NF90IF9fcDAsIGZsb2F0MzJ4NF90IF9fcDEpIHsKKyAgZmxvYXQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGZsb2F0MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBmbG9hdDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMiwgNiwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdnppcDJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDIsIDYsIDMsIDcpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdnppcDJxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMiwgNiwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdnppcDJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3QgdnppcDJxX3M2NChpbnQ2NHgyX3QgX19wMCwgaW50NjR4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMSwgMyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdnppcDJxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZ6aXAycV9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDhfdCB2emlwMl91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDQsIDEyLCA1LCAxMywgNiwgMTQsIDcsIDE1KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZ6aXAyX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZ6aXAyX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4Ml90IHZ6aXAyX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdnppcDJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMiwgNiwgMywgNyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng0X3QgdnppcDJfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDIsIDYsIDMsIDcpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdnppcDJfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCA0LCAxMiwgNSwgMTMsIDYsIDE0LCA3LCAxNSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDh4OF90IHZ6aXAyX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgNCwgMTIsIDUsIDEzLCA2LCAxNCwgNywgMTUpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgZmxvYXQzMngyX3QgdnppcDJfZjMyKGZsb2F0MzJ4Ml90IF9fcDAsIGZsb2F0MzJ4Ml90IF9fcDEpIHsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMSwgMSwgMyk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGZsb2F0MzJ4Ml90IHZ6aXAyX2YzMihmbG9hdDMyeDJfdCBfX3AwLCBmbG9hdDMyeDJfdCBfX3AxKSB7CisgIGZsb2F0MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBmbG9hdDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgZmxvYXQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYwLCBfX3JldjEsIDEsIDMpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4Ml90IHZ6aXAyX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDEsIDEsIDMpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdnppcDJfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MCwgX19yZXYxLCAxLCAzKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDRfdCB2emlwMl9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AxLCAyLCA2LCAzLCA3KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZ6aXAyX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjAsIF9fcmV2MSwgMiwgNiwgMywgNyk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ4eDE2X3QgdmFiYXFfdTgodWludDh4MTZfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkcV91OChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4MTZfdCB2YWJhcV91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZHFfdTgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWJhcV91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkcV91MzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFiYXFfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkcV91MzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWJhcV91MTYodWludDE2eDhfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkcV91MTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFiYXFfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkcV91MTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHgxNl90IHZhYmFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkcV9zOChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50OHgxNl90IHZhYmFxX3M4KGludDh4MTZfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRxX3M4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWJhcV9zMzIoaW50MzJ4NF90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRxX3MzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhYmFxX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyeDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkcV9zMzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhYmFxX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZHFfczE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFiYXFfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRxX3MxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50OHg4X3QgdmFiYV91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQ4eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZF91OChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDh4OF90IHZhYmFfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZF91OChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4Ml90IHZhYmFfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDMyeDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZF91MzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMngyX3QgdmFiYV91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfdTMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng0X3QgdmFiYV91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkX3UxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDRfdCB2YWJhX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZF91MTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50OHg4X3QgdmFiYV9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDh4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkX3M4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ4eDhfdCB2YWJhX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZF9zOChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMngyX3QgdmFiYV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRfczMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMngyX3QgdmFiYV9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQzMngyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQzMngyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdmFiZF9zMzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4NF90IHZhYmFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkX3MxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4NF90IHZhYmFfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRfczE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFiZGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKHZtb3ZsX3U4KCh1aW50OHg4X3QpKHZhYmRfdTgoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFiZGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQ4eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9ICh1aW50MTZ4OF90KShfX25vc3dhcF92bW92bF91OCgodWludDh4OF90KShfX25vc3dhcF92YWJkX3U4KF9fcmV2MCwgX19yZXYxKSkpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdmFiZGxfdTgodWludDh4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQxNng4X3QpKF9fbm9zd2FwX3Ztb3ZsX3U4KCh1aW50OHg4X3QpKF9fbm9zd2FwX3ZhYmRfdTgoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWJkbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkodm1vdmxfdTMyKCh1aW50MzJ4Ml90KSh2YWJkX3UzMihfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2YWJkbF91MzIodWludDMyeDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEpIHsKKyAgdWludDMyeDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDY0eDJfdCkoX19ub3N3YXBfdm1vdmxfdTMyKCh1aW50MzJ4Ml90KShfX25vc3dhcF92YWJkX3UzMihfX3JldjAsIF9fcmV2MSkpKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZhYmRsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9ICh1aW50NjR4Ml90KShfX25vc3dhcF92bW92bF91MzIoKHVpbnQzMngyX3QpKF9fbm9zd2FwX3ZhYmRfdTMyKF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3QgdmFiZGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKHZtb3ZsX3UxNigodWludDE2eDRfdCkodmFiZF91MTYoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFiZGxfdTE2KHVpbnQxNng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gKHVpbnQzMng0X3QpKF9fbm9zd2FwX3Ztb3ZsX3UxNigodWludDE2eDRfdCkoX19ub3N3YXBfdmFiZF91MTYoX19yZXYwLCBfX3JldjEpKSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92YWJkbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAodWludDMyeDRfdCkoX19ub3N3YXBfdm1vdmxfdTE2KCh1aW50MTZ4NF90KShfX25vc3dhcF92YWJkX3UxNihfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFiZGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkodm1vdmxfdTgoKHVpbnQ4eDhfdCkodmFiZF9zOChfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhYmRsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19ub3N3YXBfdm1vdmxfdTgoKHVpbnQ4eDhfdCkoX19ub3N3YXBfdmFiZF9zOChfX3JldjAsIF9fcmV2MSkpKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdmFiZGxfczgoaW50OHg4X3QgX19wMCwgaW50OHg4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDE2eDhfdCkoX19ub3N3YXBfdm1vdmxfdTgoKHVpbnQ4eDhfdCkoX19ub3N3YXBfdmFiZF9zOChfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFiZGxfczMyKGludDMyeDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gKGludDY0eDJfdCkodm1vdmxfdTMyKCh1aW50MzJ4Ml90KSh2YWJkX3MzMihfX3AwLCBfX3AxKSkpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhYmRsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX25vc3dhcF92bW92bF91MzIoKHVpbnQzMngyX3QpKF9fbm9zd2FwX3ZhYmRfczMyKF9fcmV2MCwgX19yZXYxKSkpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92YWJkbF9zMzIoaW50MzJ4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50NjR4Ml90KShfX25vc3dhcF92bW92bF91MzIoKHVpbnQzMngyX3QpKF9fbm9zd2FwX3ZhYmRfczMyKF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWJkbF9zMTYoaW50MTZ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSAoaW50MzJ4NF90KSh2bW92bF91MTYoKHVpbnQxNng0X3QpKHZhYmRfczE2KF9fcDAsIF9fcDEpKSkpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFiZGxfczE2KGludDE2eDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQxNng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Ztb3ZsX3UxNigodWludDE2eDRfdCkoX19ub3N3YXBfdmFiZF9zMTYoX19yZXYwLCBfX3JldjEpKSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZhYmRsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IChpbnQzMng0X3QpKF9fbm9zd2FwX3Ztb3ZsX3UxNigodWludDE2eDRfdCkoX19ub3N3YXBfdmFiZF9zMTYoX19wMCwgX19wMSkpKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWRkbF91OCh1aW50OHg4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF91OChfX3AwKSArIHZtb3ZsX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhZGRsX3U4KHVpbnQ4eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSkgeworICB1aW50OHg4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF91OChfX3JldjApICsgX19ub3N3YXBfdm1vdmxfdTgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFkZGxfdTMyKHVpbnQzMngyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfdTMyKF9fcDApICsgdm1vdmxfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhZGRsX3UzMih1aW50MzJ4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3UzMihfX3JldjApICsgX19ub3N3YXBfdm1vdmxfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhZGRsX3UxNih1aW50MTZ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3UxNihfX3AwKSArIHZtb3ZsX3UxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWRkbF91MTYodWludDE2eDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEpIHsKKyAgdWludDE2eDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF91MTYoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhZGRsX3M4KGludDh4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3M4KF9fcDApICsgdm1vdmxfczgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWRkbF9zOChpbnQ4eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDh4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX3M4KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhZGRsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3MzMihfX3AwKSArIHZtb3ZsX3MzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhZGRsX3MzMihpbnQzMngyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50MzJ4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zMzIoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhZGRsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtb3ZsX3MxNihfX3AwKSArIHZtb3ZsX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhZGRsX3MxNihpbnQxNng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MTZ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bW92bF9zMTYoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX3MxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWRkd191OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX3U4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhZGR3X3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX3U4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZhZGR3X3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSkgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF91MzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFkZHdfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhZGR3X3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF91MTYoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFkZHdfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfdTE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFkZHdfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9zOChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhZGR3X3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhZGR3X3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWRkd19zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfczMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFkZHdfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhZGR3X3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZnZXRfbGFuZV9mMTYoX19wMF8yNDIsIF9fcDFfMjQyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQxNng0X3QgX19zMF8yNDIgPSBfX3AwXzI0MjsgXAorICBmbG9hdDE2X3QgX19yZXRfMjQyOyBcCitmbG9hdDE2eDRfdCBfX3JlaW50XzI0MiA9IF9fczBfMjQyOyBcCitpbnQxNl90IF9fcmVpbnQxXzI0MiA9IHZnZXRfbGFuZV9zMTYoKihpbnQxNng0X3QgKikgJl9fcmVpbnRfMjQyLCBfX3AxXzI0Mik7IFwKKyAgX19yZXRfMjQyID0gKihmbG9hdDE2X3QgKikgJl9fcmVpbnQxXzI0MjsgXAorICBfX3JldF8yNDI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0X2xhbmVfZjE2KF9fcDBfMjQzLCBfX3AxXzI0MykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZ4NF90IF9fczBfMjQzID0gX19wMF8yNDM7IFwKKyAgZmxvYXQxNng0X3QgX19yZXYwXzI0MzsgIF9fcmV2MF8yNDMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI0MywgX19zMF8yNDMsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZfdCBfX3JldF8yNDM7IFwKK2Zsb2F0MTZ4NF90IF9fcmVpbnRfMjQzID0gX19yZXYwXzI0MzsgXAoraW50MTZfdCBfX3JlaW50MV8yNDMgPSBfX25vc3dhcF92Z2V0X2xhbmVfczE2KCooaW50MTZ4NF90ICopICZfX3JlaW50XzI0MywgX19wMV8yNDMpOyBcCisgIF9fcmV0XzI0MyA9ICooZmxvYXQxNl90ICopICZfX3JlaW50MV8yNDM7IFwKKyAgX19yZXRfMjQzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Z2V0cV9sYW5lX2YxNihfX3AwXzI0NCwgX19wMV8yNDQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3MwXzI0NCA9IF9fcDBfMjQ0OyBcCisgIGZsb2F0MTZfdCBfX3JldF8yNDQ7IFwKK2Zsb2F0MTZ4OF90IF9fcmVpbnRfMjQ0ID0gX19zMF8yNDQ7IFwKK2ludDE2X3QgX19yZWludDFfMjQ0ID0gdmdldHFfbGFuZV9zMTYoKihpbnQxNng4X3QgKikgJl9fcmVpbnRfMjQ0LCBfX3AxXzI0NCk7IFwKKyAgX19yZXRfMjQ0ID0gKihmbG9hdDE2X3QgKikgJl9fcmVpbnQxXzI0NDsgXAorICBfX3JldF8yNDQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Z2V0cV9sYW5lX2YxNihfX3AwXzI0NSwgX19wMV8yNDUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2eDhfdCBfX3MwXzI0NSA9IF9fcDBfMjQ1OyBcCisgIGZsb2F0MTZ4OF90IF9fcmV2MF8yNDU7ICBfX3JldjBfMjQ1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNDUsIF9fczBfMjQ1LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2X3QgX19yZXRfMjQ1OyBcCitmbG9hdDE2eDhfdCBfX3JlaW50XzI0NSA9IF9fcmV2MF8yNDU7IFwKK2ludDE2X3QgX19yZWludDFfMjQ1ID0gX19ub3N3YXBfdmdldHFfbGFuZV9zMTYoKihpbnQxNng4X3QgKikgJl9fcmVpbnRfMjQ1LCBfX3AxXzI0NSk7IFwKKyAgX19yZXRfMjQ1ID0gKihmbG9hdDE2X3QgKikgJl9fcmVpbnQxXzI0NTsgXAorICBfX3JldF8yNDU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3Qgdm1sYWxfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfdTgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3Qgdm1sYWxfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDE2eDhfdCBfX25vc3dhcF92bWxhbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF91OChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtbGFsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3UzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bWxhbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50NjR4Ml90IF9fbm9zd2FwX3ZtbGFsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbGFsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3UxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxhbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZtbGFsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3Qgdm1sYWxfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF9zOChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZtbGFsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczgoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MTZ4OF90IF9fbm9zd2FwX3ZtbGFsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfczgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtbGFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfczMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1sYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQ2NHgyX3QgX19ub3N3YXBfdm1sYWxfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF9zMzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbGFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfczE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdm1sYWxfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sYWxfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfdTMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2xhbmVfdTMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQzMngyX3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICB1aW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3UxNihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9sYW5lX3UxNihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICB1aW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQxNng0X3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMywgMiwgMSwgMCk7IFwKKyAgdWludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxhbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19zMCArIHZtdWxsX3MzMihfX3MxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bWxhbF9sYW5lX3MzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50NjR4Ml90IF9fczAgPSBfX3AwOyBcCisgIGludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICBpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgMSwgMCk7IFwKKyAgaW50NjR4Ml90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbGFsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwICsgdm11bGxfczE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbGFsX2xhbmVfczE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MTZ4NF90IF9fczEgPSBfX3AxOyBcCisgIGludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2bWxhbF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF91MzIoX19wMSwgKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdm1sYWxfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfdTMyKF9fcDEsICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sYWxfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm11bGxfdTE2KF9fcDEsICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbGFsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MzJ4NF90IF9fbm9zd2FwX3ZtbGFsX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3UxNihfX3AxLCAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1sYWxfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bXVsbF9zMzIoX19wMSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZtbGFsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgKGludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92bWxhbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3AxLCAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxhbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtdWxsX3MxNihfX3AxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3Qgdm1sYWxfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bXVsbF9zMTYoX19yZXYxLCAoaW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZtbGFsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdm11bGxfczE2KF9fcDEsIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2bWxzbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF91OChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bWxzbF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDhfdCBfX3AxLCB1aW50OHg4X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHg4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91OChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSB1aW50MTZ4OF90IF9fbm9zd2FwX3ZtbHNsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3U4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfdTMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtbHNsX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyeDJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIHVpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQ2NHgyX3QgX19ub3N3YXBfdm1sc2xfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfdTMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sc2xfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfdTE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MzJ4NF90IHZtbHNsX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2eDRfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm1sc2xfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2bWxzbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3M4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1sc2xfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHg4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zOChfX3JldjEsIF9fcmV2Mik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQxNng4X3QgX19ub3N3YXBfdm1sc2xfczgoaW50MTZ4OF90IF9fcDAsIGludDh4OF90IF9fcDEsIGludDh4OF90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF9zOChfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1sc2xfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJ4Ml90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF9zMzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2bWxzbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDY0eDJfdCBfX25vc3dhcF92bWxzbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3MzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3Qgdm1sc2xfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZ4NF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF9zMTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxzbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfczE2KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDMyeDRfdCBfX25vc3dhcF92bWxzbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bWxzbF9sYW5lX3UzMihfX3AwLCBfX3AxLCBfX3AyLCBfX3AzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgdWludDY0eDJfdCBfX3MwID0gX19wMDsgXAorICB1aW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIHVpbnQzMngyX3QgX19zMiA9IF9fcDI7IFwKKyAgdWludDY0eDJfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF91MzIoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfbGFuZV91MzIoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDMyeDJfdCBfX3MxID0gX19wMTsgXAorICB1aW50MzJ4Ml90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxLCBfX3MxLCAxLCAwKTsgXAorICB1aW50MzJ4Ml90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDEsIDApOyBcCisgIHVpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfbGFuZV91MTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIHVpbnQzMng0X3QgX19zMCA9IF9fcDA7IFwKKyAgdWludDE2eDRfdCBfX3MxID0gX19wMTsgXAorICB1aW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIHVpbnQzMng0X3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfdTE2KF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2xhbmVfdTE2KF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICB1aW50MzJ4NF90IF9fczAgPSBfX3AwOyBcCisgIHVpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgdWludDE2eDRfdCBfX3MyID0gX19wMjsgXAorICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczAsIF9fczAsIDMsIDIsIDEsIDApOyBcCisgIHVpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAzLCAyLCAxLCAwKTsgXAorICB1aW50MzJ4NF90IF9fcmV0OyBcCisgIF9fcmV0ID0gX19yZXYwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fcmV2MSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXYyLCBfX3JldjIsIF9fcDMsIF9fcDMsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXQ7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZtbHNsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3MwIC0gdm11bGxfczMyKF9fczEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIF9fcDMsIF9fcDMpKTsgXAorICBfX3JldDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZtbHNsX2xhbmVfczMyKF9fcDAsIF9fcDEsIF9fcDIsIF9fcDMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQ2NHgyX3QgX19zMCA9IF9fcDA7IFwKKyAgaW50MzJ4Ml90IF9fczEgPSBfX3AxOyBcCisgIGludDMyeDJfdCBfX3MyID0gX19wMjsgXAorICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMCwgX19zMCwgMSwgMCk7IFwKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczEsIF9fczEsIDEsIDApOyBcCisgIGludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyLCBfX3MyLCAxLCAwKTsgXAorICBpbnQ2NHgyX3QgX19yZXQ7IFwKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldjIsIF9fcmV2MiwgX19wMywgX19wMykpOyBcCisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsgXAorICBfX3JldDsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm1sc2xfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fczAgLSB2bXVsbF9zMTYoX19zMSwgX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMiwgX19zMiwgX19wMywgX19wMywgX19wMywgX19wMykpOyBcCisgIF9fcmV0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm1sc2xfbGFuZV9zMTYoX19wMCwgX19wMSwgX19wMiwgX19wMykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyeDRfdCBfX3MwID0gX19wMDsgXAorICBpbnQxNng0X3QgX19zMSA9IF9fcDE7IFwKKyAgaW50MTZ4NF90IF9fczIgPSBfX3AyOyBcCisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwLCBfX3MwLCAzLCAyLCAxLCAwKTsgXAorICBpbnQxNng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMSwgX19zMSwgMywgMiwgMSwgMCk7IFwKKyAgaW50MTZ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczIsIF9fczIsIDMsIDIsIDEsIDApOyBcCisgIGludDMyeDRfdCBfX3JldDsgXAorICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV2MiwgX19yZXYyLCBfX3AzLCBfX3AzLCBfX3AzLCBfX3AzKSk7IFwKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtbHNsX25fdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3UzMihfX3AxLCAodWludDMyeDJfdCkge19fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDY0eDJfdCB2bWxzbF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3UzMihfX3JldjEsICh1aW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92bWxzbF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMngyX3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF91MzIoX19wMSwgKHVpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2bWxzbF9uX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng0X3QgX19wMSwgdWludDE2X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSB2bXVsbF91MTYoX19wMSwgKHVpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3Qgdm1sc2xfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF91MTYoX19yZXYxLCAodWludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQzMng0X3QgX19ub3N3YXBfdm1sc2xfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfdTE2KF9fcDEsICh1aW50MTZ4NF90KSB7X19wMiwgX19wMiwgX19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2bWxzbF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCAtIHZtdWxsX3MzMihfX3AxLCAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1sc2xfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgLSBfX25vc3dhcF92bXVsbF9zMzIoX19yZXYxLCAoaW50MzJ4Ml90KSB7X19wMiwgX19wMn0pOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZtbHNsX25fczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMngyX3QgX19wMSwgaW50MzJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gX19ub3N3YXBfdm11bGxfczMyKF9fcDEsIChpbnQzMngyX3QpIHtfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbHNsX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng0X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwIC0gdm11bGxfczE2KF9fcDEsIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2bWxzbF9uX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCAtIF9fbm9zd2FwX3ZtdWxsX3MxNihfX3JldjEsIChpbnQxNng0X3QpIHtfX3AyLCBfX3AyLCBfX3AyLCBfX3AyfSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorX19haSBpbnQzMng0X3QgX19ub3N3YXBfdm1sc2xfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgLSBfX25vc3dhcF92bXVsbF9zMTYoX19wMSwgKGludDE2eDRfdCkge19fcDIsIF9fcDIsIF9fcDIsIF9fcDJ9KTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2c2V0X2xhbmVfZjE2KF9fcDBfMjQ2LCBfX3AxXzI0NiwgX19wMl8yNDYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2X3QgX19zMF8yNDYgPSBfX3AwXzI0NjsgXAorICBmbG9hdDE2eDRfdCBfX3MxXzI0NiA9IF9fcDFfMjQ2OyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0XzI0NjsgXAorZmxvYXQxNl90IF9fcmVpbnRfMjQ2ID0gX19zMF8yNDY7IFwKK2Zsb2F0MTZ4NF90IF9fcmVpbnQxXzI0NiA9IF9fczFfMjQ2OyBcCitpbnQxNng0X3QgX19yZWludDJfMjQ2ID0gdnNldF9sYW5lX3MxNigqKGludDE2X3QgKikgJl9fcmVpbnRfMjQ2LCAqKGludDE2eDRfdCAqKSAmX19yZWludDFfMjQ2LCBfX3AyXzI0Nik7IFwKKyAgX19yZXRfMjQ2ID0gKihmbG9hdDE2eDRfdCAqKSAmX19yZWludDJfMjQ2OyBcCisgIF9fcmV0XzI0NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRfbGFuZV9mMTYoX19wMF8yNDcsIF9fcDFfMjQ3LCBfX3AyXzI0NykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwXzI0NyA9IF9fcDBfMjQ3OyBcCisgIGZsb2F0MTZ4NF90IF9fczFfMjQ3ID0gX19wMV8yNDc7IFwKKyAgZmxvYXQxNng0X3QgX19yZXYxXzI0NzsgIF9fcmV2MV8yNDcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MxXzI0NywgX19zMV8yNDcsIDMsIDIsIDEsIDApOyBcCisgIGZsb2F0MTZ4NF90IF9fcmV0XzI0NzsgXAorZmxvYXQxNl90IF9fcmVpbnRfMjQ3ID0gX19zMF8yNDc7IFwKK2Zsb2F0MTZ4NF90IF9fcmVpbnQxXzI0NyA9IF9fcmV2MV8yNDc7IFwKK2ludDE2eDRfdCBfX3JlaW50Ml8yNDcgPSBfX25vc3dhcF92c2V0X2xhbmVfczE2KCooaW50MTZfdCAqKSAmX19yZWludF8yNDcsICooaW50MTZ4NF90ICopICZfX3JlaW50MV8yNDcsIF9fcDJfMjQ3KTsgXAorICBfX3JldF8yNDcgPSAqKGZsb2F0MTZ4NF90ICopICZfX3JlaW50Ml8yNDc7IFwKKyAgX19yZXRfMjQ3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjQ3LCBfX3JldF8yNDcsIDMsIDIsIDEsIDApOyBcCisgIF9fcmV0XzI0NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnNldHFfbGFuZV9mMTYoX19wMF8yNDgsIF9fcDFfMjQ4LCBfX3AyXzI0OCkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0MTZfdCBfX3MwXzI0OCA9IF9fcDBfMjQ4OyBcCisgIGZsb2F0MTZ4OF90IF9fczFfMjQ4ID0gX19wMV8yNDg7IFwKKyAgZmxvYXQxNng4X3QgX19yZXRfMjQ4OyBcCitmbG9hdDE2X3QgX19yZWludF8yNDggPSBfX3MwXzI0ODsgXAorZmxvYXQxNng4X3QgX19yZWludDFfMjQ4ID0gX19zMV8yNDg7IFwKK2ludDE2eDhfdCBfX3JlaW50Ml8yNDggPSB2c2V0cV9sYW5lX3MxNigqKGludDE2X3QgKikgJl9fcmVpbnRfMjQ4LCAqKGludDE2eDhfdCAqKSAmX19yZWludDFfMjQ4LCBfX3AyXzI0OCk7IFwKKyAgX19yZXRfMjQ4ID0gKihmbG9hdDE2eDhfdCAqKSAmX19yZWludDJfMjQ4OyBcCisgIF9fcmV0XzI0ODsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZzZXRxX2xhbmVfZjE2KF9fcDBfMjQ5LCBfX3AxXzI0OSwgX19wMl8yNDkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDE2X3QgX19zMF8yNDkgPSBfX3AwXzI0OTsgXAorICBmbG9hdDE2eDhfdCBfX3MxXzI0OSA9IF9fcDFfMjQ5OyBcCisgIGZsb2F0MTZ4OF90IF9fcmV2MV8yNDk7ICBfX3JldjFfMjQ5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMV8yNDksIF9fczFfMjQ5LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsgXAorICBmbG9hdDE2eDhfdCBfX3JldF8yNDk7IFwKK2Zsb2F0MTZfdCBfX3JlaW50XzI0OSA9IF9fczBfMjQ5OyBcCitmbG9hdDE2eDhfdCBfX3JlaW50MV8yNDkgPSBfX3JldjFfMjQ5OyBcCitpbnQxNng4X3QgX19yZWludDJfMjQ5ID0gX19ub3N3YXBfdnNldHFfbGFuZV9zMTYoKihpbnQxNl90ICopICZfX3JlaW50XzI0OSwgKihpbnQxNng4X3QgKikgJl9fcmVpbnQxXzI0OSwgX19wMl8yNDkpOyBcCisgIF9fcmV0XzI0OSA9ICooZmxvYXQxNng4X3QgKikgJl9fcmVpbnQyXzI0OTsgXAorICBfX3JldF8yNDkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNDksIF9fcmV0XzI0OSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7IFwKKyAgX19yZXRfMjQ5OyBcCit9KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfUVJETVgpICYmIGRlZmluZWQoX19hYXJjaDY0X18pCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cXJkbWxhaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSB2cWFkZHNfczMyKF9fcDAsIHZxcmRtdWxoc19zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxcmRtbGFoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkc19zMzIoX19wMCwgX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cXJkbWxhaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2cWFkZGhfczE2KF9fcDAsIHZxcmRtdWxoaF9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxcmRtbGFoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZxYWRkaF9zMTYoX19wMCwgX19ub3N3YXBfdnFyZG11bGhoX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sYWhzX2xhbmVfczMyKF9fcDBfMjUwLCBfX3AxXzI1MCwgX19wMl8yNTAsIF9fcDNfMjUwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzI1MCA9IF9fcDBfMjUwOyBcCisgIGludDMyX3QgX19zMV8yNTAgPSBfX3AxXzI1MDsgXAorICBpbnQzMngyX3QgX19zMl8yNTAgPSBfX3AyXzI1MDsgXAorICBpbnQzMl90IF9fcmV0XzI1MDsgXAorICBfX3JldF8yNTAgPSB2cWFkZHNfczMyKF9fczBfMjUwLCB2cXJkbXVsaHNfczMyKF9fczFfMjUwLCB2Z2V0X2xhbmVfczMyKF9fczJfMjUwLCBfX3AzXzI1MCkpKTsgXAorICBfX3JldF8yNTA7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaHNfbGFuZV9zMzIoX19wMF8yNTEsIF9fcDFfMjUxLCBfX3AyXzI1MSwgX19wM18yNTEpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMjUxID0gX19wMF8yNTE7IFwKKyAgaW50MzJfdCBfX3MxXzI1MSA9IF9fcDFfMjUxOyBcCisgIGludDMyeDJfdCBfX3MyXzI1MSA9IF9fcDJfMjUxOyBcCisgIGludDMyeDJfdCBfX3JldjJfMjUxOyAgX19yZXYyXzI1MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjUxLCBfX3MyXzI1MSwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8yNTE7IFwKKyAgX19yZXRfMjUxID0gX19ub3N3YXBfdnFhZGRzX3MzMihfX3MwXzI1MSwgX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MxXzI1MSwgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjJfMjUxLCBfX3AzXzI1MSkpKTsgXAorICBfX3JldF8yNTE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoaF9sYW5lX3MxNihfX3AwXzI1MiwgX19wMV8yNTIsIF9fcDJfMjUyLCBfX3AzXzI1MikgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8yNTIgPSBfX3AwXzI1MjsgXAorICBpbnQxNl90IF9fczFfMjUyID0gX19wMV8yNTI7IFwKKyAgaW50MTZ4NF90IF9fczJfMjUyID0gX19wMl8yNTI7IFwKKyAgaW50MTZfdCBfX3JldF8yNTI7IFwKKyAgX19yZXRfMjUyID0gdnFhZGRoX3MxNihfX3MwXzI1MiwgdnFyZG11bGhoX3MxNihfX3MxXzI1MiwgdmdldF9sYW5lX3MxNihfX3MyXzI1MiwgX19wM18yNTIpKSk7IFwKKyAgX19yZXRfMjUyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhoX2xhbmVfczE2KF9fcDBfMjUzLCBfX3AxXzI1MywgX19wMl8yNTMsIF9fcDNfMjUzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzI1MyA9IF9fcDBfMjUzOyBcCisgIGludDE2X3QgX19zMV8yNTMgPSBfX3AxXzI1MzsgXAorICBpbnQxNng0X3QgX19zMl8yNTMgPSBfX3AyXzI1MzsgXAorICBpbnQxNng0X3QgX19yZXYyXzI1MzsgIF9fcmV2Ml8yNTMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI1MywgX19zMl8yNTMsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXRfMjUzOyBcCisgIF9fcmV0XzI1MyA9IF9fbm9zd2FwX3ZxYWRkaF9zMTYoX19zMF8yNTMsIF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19zMV8yNTMsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYyXzI1MywgX19wM18yNTMpKSk7IFwKKyAgX19yZXRfMjUzOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxhaHNfbGFuZXFfczMyKF9fcDBfMjU0LCBfX3AxXzI1NCwgX19wMl8yNTQsIF9fcDNfMjU0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzI1NCA9IF9fcDBfMjU0OyBcCisgIGludDMyX3QgX19zMV8yNTQgPSBfX3AxXzI1NDsgXAorICBpbnQzMng0X3QgX19zMl8yNTQgPSBfX3AyXzI1NDsgXAorICBpbnQzMl90IF9fcmV0XzI1NDsgXAorICBfX3JldF8yNTQgPSB2cWFkZHNfczMyKF9fczBfMjU0LCB2cXJkbXVsaHNfczMyKF9fczFfMjU0LCB2Z2V0cV9sYW5lX3MzMihfX3MyXzI1NCwgX19wM18yNTQpKSk7IFwKKyAgX19yZXRfMjU0OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sYWhzX2xhbmVxX3MzMihfX3AwXzI1NSwgX19wMV8yNTUsIF9fcDJfMjU1LCBfX3AzXzI1NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8yNTUgPSBfX3AwXzI1NTsgXAorICBpbnQzMl90IF9fczFfMjU1ID0gX19wMV8yNTU7IFwKKyAgaW50MzJ4NF90IF9fczJfMjU1ID0gX19wMl8yNTU7IFwKKyAgaW50MzJ4NF90IF9fcmV2Ml8yNTU7ICBfX3JldjJfMjU1ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNTUsIF9fczJfMjU1LCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzI1NTsgXAorICBfX3JldF8yNTUgPSBfX25vc3dhcF92cWFkZHNfczMyKF9fczBfMjU1LCBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fczFfMjU1LCBfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjJfMjU1LCBfX3AzXzI1NSkpKTsgXAorICBfX3JldF8yNTU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbGFoaF9sYW5lcV9zMTYoX19wMF8yNTYsIF9fcDFfMjU2LCBfX3AyXzI1NiwgX19wM18yNTYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMjU2ID0gX19wMF8yNTY7IFwKKyAgaW50MTZfdCBfX3MxXzI1NiA9IF9fcDFfMjU2OyBcCisgIGludDE2eDhfdCBfX3MyXzI1NiA9IF9fcDJfMjU2OyBcCisgIGludDE2X3QgX19yZXRfMjU2OyBcCisgIF9fcmV0XzI1NiA9IHZxYWRkaF9zMTYoX19zMF8yNTYsIHZxcmRtdWxoaF9zMTYoX19zMV8yNTYsIHZnZXRxX2xhbmVfczE2KF9fczJfMjU2LCBfX3AzXzI1NikpKTsgXAorICBfX3JldF8yNTY7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxhaGhfbGFuZXFfczE2KF9fcDBfMjU3LCBfX3AxXzI1NywgX19wMl8yNTcsIF9fcDNfMjU3KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzI1NyA9IF9fcDBfMjU3OyBcCisgIGludDE2X3QgX19zMV8yNTcgPSBfX3AxXzI1NzsgXAorICBpbnQxNng4X3QgX19zMl8yNTcgPSBfX3AyXzI1NzsgXAorICBpbnQxNng4X3QgX19yZXYyXzI1NzsgIF9fcmV2Ml8yNTcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI1NywgX19zMl8yNTcsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXRfMjU3OyBcCisgIF9fcmV0XzI1NyA9IF9fbm9zd2FwX3ZxYWRkaF9zMTYoX19zMF8yNTcsIF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19zMV8yNTcsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2Ml8yNTcsIF9fcDNfMjU3KSkpOyBcCisgIF9fcmV0XzI1NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJfdCB2cXJkbWxzaHNfczMyKGludDMyX3QgX19wMCwgaW50MzJfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50MzJfdCBfX3JldDsKKyAgX19yZXQgPSB2cXN1YnNfczMyKF9fcDAsIHZxcmRtdWxoc19zMzIoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMl90IHZxcmRtbHNoc19zMzIoaW50MzJfdCBfX3AwLCBpbnQzMl90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQzMl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zxc3Vic19zMzIoX19wMCwgX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZfdCB2cXJkbWxzaGhfczE2KGludDE2X3QgX19wMCwgaW50MTZfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MTZfdCBfX3JldDsKKyAgX19yZXQgPSB2cXN1YmhfczE2KF9fcDAsIHZxcmRtdWxoaF9zMTYoX19wMSwgX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNl90IHZxcmRtbHNoaF9zMTYoaW50MTZfdCBfX3AwLCBpbnQxNl90IF9fcDEsIGludDE2X3QgX19wMikgeworICBpbnQxNl90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Zxc3ViaF9zMTYoX19wMCwgX19ub3N3YXBfdnFyZG11bGhoX3MxNihfX3AxLCBfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdnFyZG1sc2hzX2xhbmVfczMyKF9fcDBfMjU4LCBfX3AxXzI1OCwgX19wMl8yNTgsIF9fcDNfMjU4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzI1OCA9IF9fcDBfMjU4OyBcCisgIGludDMyX3QgX19zMV8yNTggPSBfX3AxXzI1ODsgXAorICBpbnQzMngyX3QgX19zMl8yNTggPSBfX3AyXzI1ODsgXAorICBpbnQzMl90IF9fcmV0XzI1ODsgXAorICBfX3JldF8yNTggPSB2cXN1YnNfczMyKF9fczBfMjU4LCB2cXJkbXVsaHNfczMyKF9fczFfMjU4LCB2Z2V0X2xhbmVfczMyKF9fczJfMjU4LCBfX3AzXzI1OCkpKTsgXAorICBfX3JldF8yNTg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxzaHNfbGFuZV9zMzIoX19wMF8yNTksIF9fcDFfMjU5LCBfX3AyXzI1OSwgX19wM18yNTkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQzMl90IF9fczBfMjU5ID0gX19wMF8yNTk7IFwKKyAgaW50MzJfdCBfX3MxXzI1OSA9IF9fcDFfMjU5OyBcCisgIGludDMyeDJfdCBfX3MyXzI1OSA9IF9fcDJfMjU5OyBcCisgIGludDMyeDJfdCBfX3JldjJfMjU5OyAgX19yZXYyXzI1OSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczJfMjU5LCBfX3MyXzI1OSwgMSwgMCk7IFwKKyAgaW50MzJfdCBfX3JldF8yNTk7IFwKKyAgX19yZXRfMjU5ID0gX19ub3N3YXBfdnFzdWJzX3MzMihfX3MwXzI1OSwgX19ub3N3YXBfdnFyZG11bGhzX3MzMihfX3MxXzI1OSwgX19ub3N3YXBfdmdldF9sYW5lX3MzMihfX3JldjJfMjU5LCBfX3AzXzI1OSkpKTsgXAorICBfX3JldF8yNTk7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoaF9sYW5lX3MxNihfX3AwXzI2MCwgX19wMV8yNjAsIF9fcDJfMjYwLCBfX3AzXzI2MCkgX19leHRlbnNpb25fXyAoeyBcCisgIGludDE2X3QgX19zMF8yNjAgPSBfX3AwXzI2MDsgXAorICBpbnQxNl90IF9fczFfMjYwID0gX19wMV8yNjA7IFwKKyAgaW50MTZ4NF90IF9fczJfMjYwID0gX19wMl8yNjA7IFwKKyAgaW50MTZfdCBfX3JldF8yNjA7IFwKKyAgX19yZXRfMjYwID0gdnFzdWJoX3MxNihfX3MwXzI2MCwgdnFyZG11bGhoX3MxNihfX3MxXzI2MCwgdmdldF9sYW5lX3MxNihfX3MyXzI2MCwgX19wM18yNjApKSk7IFwKKyAgX19yZXRfMjYwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hoX2xhbmVfczE2KF9fcDBfMjYxLCBfX3AxXzI2MSwgX19wMl8yNjEsIF9fcDNfMjYxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzI2MSA9IF9fcDBfMjYxOyBcCisgIGludDE2X3QgX19zMV8yNjEgPSBfX3AxXzI2MTsgXAorICBpbnQxNng0X3QgX19zMl8yNjEgPSBfX3AyXzI2MTsgXAorICBpbnQxNng0X3QgX19yZXYyXzI2MTsgIF9fcmV2Ml8yNjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI2MSwgX19zMl8yNjEsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXRfMjYxOyBcCisgIF9fcmV0XzI2MSA9IF9fbm9zd2FwX3Zxc3ViaF9zMTYoX19zMF8yNjEsIF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19zMV8yNjEsIF9fbm9zd2FwX3ZnZXRfbGFuZV9zMTYoX19yZXYyXzI2MSwgX19wM18yNjEpKSk7IFwKKyAgX19yZXRfMjYxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2cXJkbWxzaHNfbGFuZXFfczMyKF9fcDBfMjYyLCBfX3AxXzI2MiwgX19wMl8yNjIsIF9fcDNfMjYyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MzJfdCBfX3MwXzI2MiA9IF9fcDBfMjYyOyBcCisgIGludDMyX3QgX19zMV8yNjIgPSBfX3AxXzI2MjsgXAorICBpbnQzMng0X3QgX19zMl8yNjIgPSBfX3AyXzI2MjsgXAorICBpbnQzMl90IF9fcmV0XzI2MjsgXAorICBfX3JldF8yNjIgPSB2cXN1YnNfczMyKF9fczBfMjYyLCB2cXJkbXVsaHNfczMyKF9fczFfMjYyLCB2Z2V0cV9sYW5lX3MzMihfX3MyXzI2MiwgX19wM18yNjIpKSk7IFwKKyAgX19yZXRfMjYyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdnFyZG1sc2hzX2xhbmVxX3MzMihfX3AwXzI2MywgX19wMV8yNjMsIF9fcDJfMjYzLCBfX3AzXzI2MykgX19leHRlbnNpb25fXyAoeyBcCisgIGludDMyX3QgX19zMF8yNjMgPSBfX3AwXzI2MzsgXAorICBpbnQzMl90IF9fczFfMjYzID0gX19wMV8yNjM7IFwKKyAgaW50MzJ4NF90IF9fczJfMjYzID0gX19wMl8yNjM7IFwKKyAgaW50MzJ4NF90IF9fcmV2Ml8yNjM7ICBfX3JldjJfMjYzID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yNjMsIF9fczJfMjYzLCAzLCAyLCAxLCAwKTsgXAorICBpbnQzMl90IF9fcmV0XzI2MzsgXAorICBfX3JldF8yNjMgPSBfX25vc3dhcF92cXN1YnNfczMyKF9fczBfMjYzLCBfX25vc3dhcF92cXJkbXVsaHNfczMyKF9fczFfMjYzLCBfX25vc3dhcF92Z2V0cV9sYW5lX3MzMihfX3JldjJfMjYzLCBfX3AzXzI2MykpKTsgXAorICBfX3JldF8yNjM7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZxcmRtbHNoaF9sYW5lcV9zMTYoX19wMF8yNjQsIF9fcDFfMjY0LCBfX3AyXzI2NCwgX19wM18yNjQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBpbnQxNl90IF9fczBfMjY0ID0gX19wMF8yNjQ7IFwKKyAgaW50MTZfdCBfX3MxXzI2NCA9IF9fcDFfMjY0OyBcCisgIGludDE2eDhfdCBfX3MyXzI2NCA9IF9fcDJfMjY0OyBcCisgIGludDE2X3QgX19yZXRfMjY0OyBcCisgIF9fcmV0XzI2NCA9IHZxc3ViaF9zMTYoX19zMF8yNjQsIHZxcmRtdWxoaF9zMTYoX19zMV8yNjQsIHZnZXRxX2xhbmVfczE2KF9fczJfMjY0LCBfX3AzXzI2NCkpKTsgXAorICBfX3JldF8yNjQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2cXJkbWxzaGhfbGFuZXFfczE2KF9fcDBfMjY1LCBfX3AxXzI2NSwgX19wMl8yNjUsIF9fcDNfMjY1KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgaW50MTZfdCBfX3MwXzI2NSA9IF9fcDBfMjY1OyBcCisgIGludDE2X3QgX19zMV8yNjUgPSBfX3AxXzI2NTsgXAorICBpbnQxNng4X3QgX19zMl8yNjUgPSBfX3AyXzI2NTsgXAorICBpbnQxNng4X3QgX19yZXYyXzI2NTsgIF9fcmV2Ml8yNjUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI2NSwgX19zMl8yNjUsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOyBcCisgIGludDE2X3QgX19yZXRfMjY1OyBcCisgIF9fcmV0XzI2NSA9IF9fbm9zd2FwX3Zxc3ViaF9zMTYoX19zMF8yNjUsIF9fbm9zd2FwX3ZxcmRtdWxoaF9zMTYoX19zMV8yNjUsIF9fbm9zd2FwX3ZnZXRxX2xhbmVfczE2KF9fcmV2Ml8yNjUsIF9fcDNfMjY1KSkpOyBcCisgIF9fcmV0XzI2NTsgXAorfSkKKyNlbmRpZgorCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQxNng4X3QgdmFiZGxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZhYmRsX3U4KHZnZXRfaGlnaF91OChfX3AwKSwgdmdldF9oaWdoX3U4KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2YWJkbF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQ4eDE2X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiZGxfdTgoX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFiZGxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJkbF91MzIodmdldF9oaWdoX3UzMihfX3AwKSwgdmdldF9oaWdoX3UzMihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFiZGxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJkbF91MzIoX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWJkbF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZhYmRsX3UxNih2Z2V0X2hpZ2hfdTE2KF9fcDApLCB2Z2V0X2hpZ2hfdTE2KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWJkbF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmRsX3UxNihfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFiZGxfaGlnaF9zOChpbnQ4eDE2X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZhYmRsX3M4KHZnZXRfaGlnaF9zOChfX3AwKSwgdmdldF9oaWdoX3M4KF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhYmRsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiZGxfczgoX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjEpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWJkbF9oaWdoX3MzMihpbnQzMng0X3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZhYmRsX3MzMih2Z2V0X2hpZ2hfczMyKF9fcDApLCB2Z2V0X2hpZ2hfczMyKF9fcDEpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhYmRsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmRsX3MzMihfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MCksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQzMng0X3QgdmFiZGxfaGlnaF9zMTYoaW50MTZ4OF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJkbF9zMTYodmdldF9oaWdoX3MxNihfX3AwKSwgdmdldF9oaWdoX3MxNihfX3AxKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWJkbF9oaWdoX3MxNihpbnQxNng4X3QgX19wMCwgaW50MTZ4OF90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJkbF9zMTYoX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjApLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSkpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWRkbF9oaWdoX3U4KHVpbnQ4eDE2X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF91OChfX3AwKSArIHZtb3ZsX2hpZ2hfdTgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFkZGxfaGlnaF91OCh1aW50OHgxNl90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50OHgxNl90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTgoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFkZGxfaGlnaF91MzIodWludDMyeDRfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3UzMihfX3AwKSArIHZtb3ZsX2hpZ2hfdTMyKF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhZGRsX2hpZ2hfdTMyKHVpbnQzMng0X3QgX19wMCwgdWludDMyeDRfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF91MzIoX19yZXYwKSArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTMyKF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhZGRsX2hpZ2hfdTE2KHVpbnQxNng4X3QgX19wMCwgdWludDE2eDhfdCBfX3AxKSB7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF91MTYoX19wMCkgKyB2bW92bF9oaWdoX3UxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWRkbF9oaWdoX3UxNih1aW50MTZ4OF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTE2KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9oaWdoX3UxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhZGRsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2bW92bF9oaWdoX3M4KF9fcDApICsgdm1vdmxfaGlnaF9zOChfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhZGRsX2hpZ2hfczgoaW50OHgxNl90IF9fcDAsIGludDh4MTZfdCBfX3AxKSB7CisgIGludDh4MTZfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1vdmxfaGlnaF9zOChfX3JldjApICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zOChfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhZGRsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF9zMzIoX19wMCkgKyB2bW92bF9oaWdoX3MzMihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhZGRsX2hpZ2hfczMyKGludDMyeDRfdCBfX3AwLCBpbnQzMng0X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczMyKF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9oaWdoX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhZGRsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1vdmxfaGlnaF9zMTYoX19wMCkgKyB2bW92bF9oaWdoX3MxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhZGRsX2hpZ2hfczE2KGludDE2eDhfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfczE2KF9fcmV2MCkgKyBfX25vc3dhcF92bW92bF9oaWdoX3MxNihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWRkd19oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX2hpZ2hfdTgoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFkZHdfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSkgeworICB1aW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTgoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3QgdmFkZHdfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfaGlnaF91MzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFkZHdfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9oaWdoX3UzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWRkd19oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9oaWdoX3UxNihfX3AxKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2YWRkd19oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSkgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3Ztb3ZsX2hpZ2hfdTE2KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQxNng4X3QgdmFkZHdfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2bW92bF9oaWdoX3M4KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3QgdmFkZHdfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEpIHsKKyAgaW50MTZ4OF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9oaWdoX3M4KF9fcmV2MSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3QgdmFkZHdfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdm1vdmxfaGlnaF9zMzIoX19wMSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDY0eDJfdCB2YWRkd19oaWdoX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92bW92bF9oaWdoX3MzMihfX3JldjEpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZhZGR3X2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSkgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZtb3ZsX2hpZ2hfczE2KF9fcDEpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQzMng0X3QgdmFkZHdfaGlnaF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19yZXYwICsgX19ub3N3YXBfdm1vdmxfaGlnaF9zMTYoX19yZXYxKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lX3A2NChfX3AwXzI2NiwgX19wMV8yNjYsIF9fcDJfMjY2LCBfX3AzXzI2NikgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMF8yNjYgPSBfX3AwXzI2NjsgXAorICBwb2x5NjR4MV90IF9fczJfMjY2ID0gX19wMl8yNjY7IFwKKyAgcG9seTY0eDJfdCBfX3JldF8yNjY7IFwKKyAgX19yZXRfMjY2ID0gdnNldHFfbGFuZV9wNjQodmdldF9sYW5lX3A2NChfX3MyXzI2NiwgX19wM18yNjYpLCBfX3MwXzI2NiwgX19wMV8yNjYpOyBcCisgIF9fcmV0XzI2NjsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lX3A2NChfX3AwXzI2NywgX19wMV8yNjcsIF9fcDJfMjY3LCBfX3AzXzI2NykgX19leHRlbnNpb25fXyAoeyBcCisgIHBvbHk2NHgyX3QgX19zMF8yNjcgPSBfX3AwXzI2NzsgXAorICBwb2x5NjR4MV90IF9fczJfMjY3ID0gX19wMl8yNjc7IFwKKyAgcG9seTY0eDJfdCBfX3JldjBfMjY3OyAgX19yZXYwXzI2NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjY3LCBfX3MwXzI2NywgMSwgMCk7IFwKKyAgcG9seTY0eDJfdCBfX3JldF8yNjc7IFwKKyAgX19yZXRfMjY3ID0gX19ub3N3YXBfdnNldHFfbGFuZV9wNjQoX19ub3N3YXBfdmdldF9sYW5lX3A2NChfX3MyXzI2NywgX19wM18yNjcpLCBfX3JldjBfMjY3LCBfX3AxXzI2Nyk7IFwKKyAgX19yZXRfMjY3ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjY3LCBfX3JldF8yNjcsIDEsIDApOyBcCisgIF9fcmV0XzI2NzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlxX2xhbmVfZjY0KF9fcDBfMjY4LCBfX3AxXzI2OCwgX19wMl8yNjgsIF9fcDNfMjY4KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMF8yNjggPSBfX3AwXzI2ODsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzI2OCA9IF9fcDJfMjY4OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0XzI2ODsgXAorICBfX3JldF8yNjggPSB2c2V0cV9sYW5lX2Y2NCh2Z2V0X2xhbmVfZjY0KF9fczJfMjY4LCBfX3AzXzI2OCksIF9fczBfMjY4LCBfX3AxXzI2OCk7IFwKKyAgX19yZXRfMjY4OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVfZjY0KF9fcDBfMjY5LCBfX3AxXzI2OSwgX19wMl8yNjksIF9fcDNfMjY5KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMF8yNjkgPSBfX3AwXzI2OTsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzI2OSA9IF9fcDJfMjY5OyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2MF8yNjk7ICBfX3JldjBfMjY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMF8yNjksIF9fczBfMjY5LCAxLCAwKTsgXAorICBmbG9hdDY0eDJfdCBfX3JldF8yNjk7IFwKKyAgX19yZXRfMjY5ID0gX19ub3N3YXBfdnNldHFfbGFuZV9mNjQoX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MyXzI2OSwgX19wM18yNjkpLCBfX3JldjBfMjY5LCBfX3AxXzI2OSk7IFwKKyAgX19yZXRfMjY5ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXRfMjY5LCBfX3JldF8yNjksIDEsIDApOyBcCisgIF9fcmV0XzI2OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZV9wNjQoX19wMF8yNzAsIF9fcDFfMjcwLCBfX3AyXzI3MCwgX19wM18yNzApIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczBfMjcwID0gX19wMF8yNzA7IFwKKyAgcG9seTY0eDFfdCBfX3MyXzI3MCA9IF9fcDJfMjcwOyBcCisgIHBvbHk2NHgxX3QgX19yZXRfMjcwOyBcCisgIF9fcmV0XzI3MCA9IHZzZXRfbGFuZV9wNjQodmdldF9sYW5lX3A2NChfX3MyXzI3MCwgX19wM18yNzApLCBfX3MwXzI3MCwgX19wMV8yNzApOyBcCisgIF9fcmV0XzI3MDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5X2xhbmVfcDY0KF9fcDBfMjcxLCBfX3AxXzI3MSwgX19wMl8yNzEsIF9fcDNfMjcxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDFfdCBfX3MwXzI3MSA9IF9fcDBfMjcxOyBcCisgIHBvbHk2NHgxX3QgX19zMl8yNzEgPSBfX3AyXzI3MTsgXAorICBwb2x5NjR4MV90IF9fcmV0XzI3MTsgXAorICBfX3JldF8yNzEgPSBfX25vc3dhcF92c2V0X2xhbmVfcDY0KF9fbm9zd2FwX3ZnZXRfbGFuZV9wNjQoX19zMl8yNzEsIF9fcDNfMjcxKSwgX19zMF8yNzEsIF9fcDFfMjcxKTsgXAorICBfX3JldF8yNzE7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5X2xhbmVfZjY0KF9fcDBfMjcyLCBfX3AxXzI3MiwgX19wMl8yNzIsIF9fcDNfMjcyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8yNzIgPSBfX3AwXzI3MjsgXAorICBmbG9hdDY0eDFfdCBfX3MyXzI3MiA9IF9fcDJfMjcyOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzI3MjsgXAorICBfX3JldF8yNzIgPSB2c2V0X2xhbmVfZjY0KHZnZXRfbGFuZV9mNjQoX19zMl8yNzIsIF9fcDNfMjcyKSwgX19zMF8yNzIsIF9fcDFfMjcyKTsgXAorICBfX3JldF8yNzI7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lX2Y2NChfX3AwXzI3MywgX19wMV8yNzMsIF9fcDJfMjczLCBfX3AzXzI3MykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMjczID0gX19wMF8yNzM7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMl8yNzMgPSBfX3AyXzI3MzsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8yNzM7IFwKKyAgX19yZXRfMjczID0gX19ub3N3YXBfdnNldF9sYW5lX2Y2NChfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczJfMjczLCBfX3AzXzI3MyksIF9fczBfMjczLCBfX3AxXzI3Myk7IFwKKyAgX19yZXRfMjczOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weXFfbGFuZXFfcDY0KF9fcDBfMjc0LCBfX3AxXzI3NCwgX19wMl8yNzQsIF9fcDNfMjc0KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgcG9seTY0eDJfdCBfX3MwXzI3NCA9IF9fcDBfMjc0OyBcCisgIHBvbHk2NHgyX3QgX19zMl8yNzQgPSBfX3AyXzI3NDsgXAorICBwb2x5NjR4Ml90IF9fcmV0XzI3NDsgXAorICBfX3JldF8yNzQgPSB2c2V0cV9sYW5lX3A2NCh2Z2V0cV9sYW5lX3A2NChfX3MyXzI3NCwgX19wM18yNzQpLCBfX3MwXzI3NCwgX19wMV8yNzQpOyBcCisgIF9fcmV0XzI3NDsgXAorfSkKKyNlbHNlCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9wNjQoX19wMF8yNzUsIF9fcDFfMjc1LCBfX3AyXzI3NSwgX19wM18yNzUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4Ml90IF9fczBfMjc1ID0gX19wMF8yNzU7IFwKKyAgcG9seTY0eDJfdCBfX3MyXzI3NSA9IF9fcDJfMjc1OyBcCisgIHBvbHk2NHgyX3QgX19yZXYwXzI3NTsgIF9fcmV2MF8yNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MwXzI3NSwgX19zMF8yNzUsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXYyXzI3NTsgIF9fcmV2Ml8yNzUgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI3NSwgX19zMl8yNzUsIDEsIDApOyBcCisgIHBvbHk2NHgyX3QgX19yZXRfMjc1OyBcCisgIF9fcmV0XzI3NSA9IF9fbm9zd2FwX3ZzZXRxX2xhbmVfcDY0KF9fbm9zd2FwX3ZnZXRxX2xhbmVfcDY0KF9fcmV2Ml8yNzUsIF9fcDNfMjc1KSwgX19yZXYwXzI3NSwgX19wMV8yNzUpOyBcCisgIF9fcmV0XzI3NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0XzI3NSwgX19yZXRfMjc1LCAxLCAwKTsgXAorICBfX3JldF8yNzU7IFwKK30pCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIHZjb3B5cV9sYW5lcV9mNjQoX19wMF8yNzYsIF9fcDFfMjc2LCBfX3AyXzI3NiwgX19wM18yNzYpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDJfdCBfX3MwXzI3NiA9IF9fcDBfMjc2OyBcCisgIGZsb2F0NjR4Ml90IF9fczJfMjc2ID0gX19wMl8yNzY7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXRfMjc2OyBcCisgIF9fcmV0XzI3NiA9IHZzZXRxX2xhbmVfZjY0KHZnZXRxX2xhbmVfZjY0KF9fczJfMjc2LCBfX3AzXzI3NiksIF9fczBfMjc2LCBfX3AxXzI3Nik7IFwKKyAgX19yZXRfMjc2OyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlxX2xhbmVxX2Y2NChfX3AwXzI3NywgX19wMV8yNzcsIF9fcDJfMjc3LCBfX3AzXzI3NykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4Ml90IF9fczBfMjc3ID0gX19wMF8yNzc7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMl8yNzcgPSBfX3AyXzI3NzsgXAorICBmbG9hdDY0eDJfdCBfX3JldjBfMjc3OyAgX19yZXYwXzI3NyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczBfMjc3LCBfX3MwXzI3NywgMSwgMCk7IFwKKyAgZmxvYXQ2NHgyX3QgX19yZXYyXzI3NzsgIF9fcmV2Ml8yNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI3NywgX19zMl8yNzcsIDEsIDApOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV0XzI3NzsgXAorICBfX3JldF8yNzcgPSBfX25vc3dhcF92c2V0cV9sYW5lX2Y2NChfX25vc3dhcF92Z2V0cV9sYW5lX2Y2NChfX3JldjJfMjc3LCBfX3AzXzI3NyksIF9fcmV2MF8yNzcsIF9fcDFfMjc3KTsgXAorICBfX3JldF8yNzcgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldF8yNzcsIF9fcmV0XzI3NywgMSwgMCk7IFwKKyAgX19yZXRfMjc3OyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2Y29weV9sYW5lcV9wNjQoX19wMF8yNzgsIF9fcDFfMjc4LCBfX3AyXzI3OCwgX19wM18yNzgpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczBfMjc4ID0gX19wMF8yNzg7IFwKKyAgcG9seTY0eDJfdCBfX3MyXzI3OCA9IF9fcDJfMjc4OyBcCisgIHBvbHk2NHgxX3QgX19yZXRfMjc4OyBcCisgIF9fcmV0XzI3OCA9IHZzZXRfbGFuZV9wNjQodmdldHFfbGFuZV9wNjQoX19zMl8yNzgsIF9fcDNfMjc4KSwgX19zMF8yNzgsIF9fcDFfMjc4KTsgXAorICBfX3JldF8yNzg7IFwKK30pCisjZWxzZQorI2RlZmluZSB2Y29weV9sYW5lcV9wNjQoX19wMF8yNzksIF9fcDFfMjc5LCBfX3AyXzI3OSwgX19wM18yNzkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBwb2x5NjR4MV90IF9fczBfMjc5ID0gX19wMF8yNzk7IFwKKyAgcG9seTY0eDJfdCBfX3MyXzI3OSA9IF9fcDJfMjc5OyBcCisgIHBvbHk2NHgyX3QgX19yZXYyXzI3OTsgIF9fcmV2Ml8yNzkgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3MyXzI3OSwgX19zMl8yNzksIDEsIDApOyBcCisgIHBvbHk2NHgxX3QgX19yZXRfMjc5OyBcCisgIF9fcmV0XzI3OSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9wNjQoX19ub3N3YXBfdmdldHFfbGFuZV9wNjQoX19yZXYyXzI3OSwgX19wM18yNzkpLCBfX3MwXzI3OSwgX19wMV8yNzkpOyBcCisgIF9fcmV0XzI3OTsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdmNvcHlfbGFuZXFfZjY0KF9fcDBfMjgwLCBfX3AxXzI4MCwgX19wMl8yODAsIF9fcDNfMjgwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8yODAgPSBfX3AwXzI4MDsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzI4MCA9IF9fcDJfMjgwOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzI4MDsgXAorICBfX3JldF8yODAgPSB2c2V0X2xhbmVfZjY0KHZnZXRxX2xhbmVfZjY0KF9fczJfMjgwLCBfX3AzXzI4MCksIF9fczBfMjgwLCBfX3AxXzI4MCk7IFwKKyAgX19yZXRfMjgwOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdmNvcHlfbGFuZXFfZjY0KF9fcDBfMjgxLCBfX3AxXzI4MSwgX19wMl8yODEsIF9fcDNfMjgxKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8yODEgPSBfX3AwXzI4MTsgXAorICBmbG9hdDY0eDJfdCBfX3MyXzI4MSA9IF9fcDJfMjgxOyBcCisgIGZsb2F0NjR4Ml90IF9fcmV2Ml8yODE7ICBfX3JldjJfMjgxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19zMl8yODEsIF9fczJfMjgxLCAxLCAwKTsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8yODE7IFwKKyAgX19yZXRfMjgxID0gX19ub3N3YXBfdnNldF9sYW5lX2Y2NChfX25vc3dhcF92Z2V0cV9sYW5lX2Y2NChfX3JldjJfMjgxLCBfX3AzXzI4MSksIF9fczBfMjgxLCBfX3AxXzI4MSk7IFwKKyAgX19yZXRfMjgxOyBcCit9KQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbGFsX2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX3U4KF9fcDAsIHZnZXRfaGlnaF91OChfX3AxKSwgdmdldF9oaWdoX3U4KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bWxhbF9oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF91OChfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtbGFsX2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF91MzIoX19wMCwgdmdldF9oaWdoX3UzMihfX3AxKSwgdmdldF9oaWdoX3UzMihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sYWxfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX3UxNihfX3AwLCB2Z2V0X2hpZ2hfdTE2KF9fcDEpLCB2Z2V0X2hpZ2hfdTE2KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxhbF9oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfdTE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtbGFsX2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfczgoX19wMCwgdmdldF9oaWdoX3M4KF9fcDEpLCB2Z2V0X2hpZ2hfczgoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1sYWxfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9zOChfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1sYWxfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sYWxfczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIHZnZXRfaGlnaF9zMzIoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1sYWxfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbGFsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCB2Z2V0X2hpZ2hfczE2KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbGFsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1sYWxfaGlnaF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX25fdTMyKF9fcDAsIHZnZXRfaGlnaF91MzIoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtbGFsX2hpZ2hfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9uX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbGFsX2hpZ2hfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF9uX3UxNihfX3AwLCB2Z2V0X2hpZ2hfdTE2KF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxhbF9oaWdoX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sYWxfbl91MTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtbGFsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtbGFsX25fczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1sYWxfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbGFsX25fczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxhbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxhbF9uX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbGFsX2hpZ2hfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxhbF9uX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZtbHNsX2hpZ2hfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHgxNl90IF9fcDEsIHVpbnQ4eDE2X3QgX19wMikgeworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX3U4KF9fcDAsIHZnZXRfaGlnaF91OChfX3AxKSwgdmdldF9oaWdoX3U4KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDE2eDhfdCB2bWxzbF9oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4MTZfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF91OChfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91OChfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50NjR4Ml90IHZtbHNsX2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF91MzIoX19wMCwgdmdldF9oaWdoX3UzMihfX3AxKSwgdmdldF9oaWdoX3UzMihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfaGlnaF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMng0X3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3UzMihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQzMng0X3Qgdm1sc2xfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX3UxNihfX3AwLCB2Z2V0X2hpZ2hfdTE2KF9fcDEpLCB2Z2V0X2hpZ2hfdTE2KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxzbF9oaWdoX3UxNih1aW50MzJ4NF90IF9fcDAsIHVpbnQxNng4X3QgX19wMSwgdWludDE2eDhfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfdTE2KF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZtbHNsX2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfczgoX19wMCwgdmdldF9oaWdoX3M4KF9fcDEpLCB2Z2V0X2hpZ2hfczgoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQxNng4X3Qgdm1sc2xfaGlnaF9zOChpbnQxNng4X3QgX19wMCwgaW50OHgxNl90IF9fcDEsIGludDh4MTZfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9zOChfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zOChfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSBpbnQ2NHgyX3Qgdm1sc2xfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdm1sc2xfczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIHZnZXRfaGlnaF9zMzIoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1sc2xfaGlnaF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMng0X3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDMsIDIsIDEsIDApOworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX25vc3dhcF92Z2V0X2hpZ2hfczMyKF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MzJ4NF90IHZtbHNsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCB2Z2V0X2hpZ2hfczE2KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbHNsX2hpZ2hfczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZ4OF90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDE2eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MxNihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIHVpbnQ2NHgyX3Qgdm1sc2xfaGlnaF9uX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX25fdTMyKF9fcDAsIHZnZXRfaGlnaF91MzIoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZtbHNsX2hpZ2hfbl91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4NF90IF9fcDEsIHVpbnQzMl90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9uX3UzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZtbHNsX2hpZ2hfbl91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNl90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF9uX3UxNihfX3AwLCB2Z2V0X2hpZ2hfdTE2KF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgdWludDMyeDRfdCB2bWxzbF9oaWdoX25fdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZfdCBfX3AyKSB7CisgIHVpbnQzMng0X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdm1sc2xfbl91MTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTE2KF9fcmV2MSksIF9fcDIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZtbHNsX2hpZ2hfbl9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDRfdCBfX3AxLCBpbnQzMl90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZtbHNsX25fczMyKF9fcDAsIHZnZXRfaGlnaF9zMzIoX19wMSksIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSBpbnQ2NHgyX3Qgdm1sc2xfaGlnaF9uX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4NF90IF9fcDEsIGludDMyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZtbHNsX25fczMyKF9fcmV2MCwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjEpLCBfX3AyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2bWxzbF9oaWdoX25fczE2KGludDMyeDRfdCBfX3AwLCBpbnQxNng4X3QgX19wMSwgaW50MTZfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2bWxzbF9uX3MxNihfX3AwLCB2Z2V0X2hpZ2hfczE2KF9fcDEpLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZtbHNsX2hpZ2hfbl9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDhfdCBfX3AxLCBpbnQxNl90IF9fcDIpIHsKKyAgaW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92bWxzbF9uX3MxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYxKSwgX19wMik7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSB2bXVseF9sYW5lX2Y2NChfX3AwXzI4MiwgX19wMV8yODIsIF9fcDJfMjgyKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMF8yODIgPSBfX3AwXzI4MjsgXAorICBmbG9hdDY0eDFfdCBfX3MxXzI4MiA9IF9fcDFfMjgyOyBcCisgIGZsb2F0NjR4MV90IF9fcmV0XzI4MjsgXAorICBmbG9hdDY0X3QgX194XzI4MiA9IHZnZXRfbGFuZV9mNjQoX19zMF8yODIsIDApOyBcCisgIGZsb2F0NjRfdCBfX3lfMjgyID0gdmdldF9sYW5lX2Y2NChfX3MxXzI4MiwgX19wMl8yODIpOyBcCisgIGZsb2F0NjRfdCBfX3pfMjgyID0gdm11bHhkX2Y2NChfX3hfMjgyLCBfX3lfMjgyKTsgXAorICBfX3JldF8yODIgPSB2c2V0X2xhbmVfZjY0KF9fel8yODIsIF9fczBfMjgyLCBfX3AyXzI4Mik7IFwKKyAgX19yZXRfMjgyOyBcCit9KQorI2Vsc2UKKyNkZWZpbmUgdm11bHhfbGFuZV9mNjQoX19wMF8yODMsIF9fcDFfMjgzLCBfX3AyXzI4MykgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMjgzID0gX19wMF8yODM7IFwKKyAgZmxvYXQ2NHgxX3QgX19zMV8yODMgPSBfX3AxXzI4MzsgXAorICBmbG9hdDY0eDFfdCBfX3JldF8yODM7IFwKKyAgZmxvYXQ2NF90IF9feF8yODMgPSBfX25vc3dhcF92Z2V0X2xhbmVfZjY0KF9fczBfMjgzLCAwKTsgXAorICBmbG9hdDY0X3QgX195XzI4MyA9IF9fbm9zd2FwX3ZnZXRfbGFuZV9mNjQoX19zMV8yODMsIF9fcDJfMjgzKTsgXAorICBmbG9hdDY0X3QgX196XzI4MyA9IF9fbm9zd2FwX3ZtdWx4ZF9mNjQoX194XzI4MywgX195XzI4Myk7IFwKKyAgX19yZXRfMjgzID0gX19ub3N3YXBfdnNldF9sYW5lX2Y2NChfX3pfMjgzLCBfX3MwXzI4MywgX19wMl8yODMpOyBcCisgIF9fcmV0XzI4MzsgXAorfSkKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgdm11bHhfbGFuZXFfZjY0KF9fcDBfMjg0LCBfX3AxXzI4NCwgX19wMl8yODQpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBmbG9hdDY0eDFfdCBfX3MwXzI4NCA9IF9fcDBfMjg0OyBcCisgIGZsb2F0NjR4Ml90IF9fczFfMjg0ID0gX19wMV8yODQ7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMjg0OyBcCisgIGZsb2F0NjRfdCBfX3hfMjg0ID0gdmdldF9sYW5lX2Y2NChfX3MwXzI4NCwgMCk7IFwKKyAgZmxvYXQ2NF90IF9feV8yODQgPSB2Z2V0cV9sYW5lX2Y2NChfX3MxXzI4NCwgX19wMl8yODQpOyBcCisgIGZsb2F0NjRfdCBfX3pfMjg0ID0gdm11bHhkX2Y2NChfX3hfMjg0LCBfX3lfMjg0KTsgXAorICBfX3JldF8yODQgPSB2c2V0X2xhbmVfZjY0KF9fel8yODQsIF9fczBfMjg0LCAwKTsgXAorICBfX3JldF8yODQ7IFwKK30pCisjZWxzZQorI2RlZmluZSB2bXVseF9sYW5lcV9mNjQoX19wMF8yODUsIF9fcDFfMjg1LCBfX3AyXzI4NSkgX19leHRlbnNpb25fXyAoeyBcCisgIGZsb2F0NjR4MV90IF9fczBfMjg1ID0gX19wMF8yODU7IFwKKyAgZmxvYXQ2NHgyX3QgX19zMV8yODUgPSBfX3AxXzI4NTsgXAorICBmbG9hdDY0eDJfdCBfX3JldjFfMjg1OyAgX19yZXYxXzI4NSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fczFfMjg1LCBfX3MxXzI4NSwgMSwgMCk7IFwKKyAgZmxvYXQ2NHgxX3QgX19yZXRfMjg1OyBcCisgIGZsb2F0NjRfdCBfX3hfMjg1ID0gX19ub3N3YXBfdmdldF9sYW5lX2Y2NChfX3MwXzI4NSwgMCk7IFwKKyAgZmxvYXQ2NF90IF9feV8yODUgPSBfX25vc3dhcF92Z2V0cV9sYW5lX2Y2NChfX3JldjFfMjg1LCBfX3AyXzI4NSk7IFwKKyAgZmxvYXQ2NF90IF9fel8yODUgPSBfX25vc3dhcF92bXVseGRfZjY0KF9feF8yODUsIF9feV8yODUpOyBcCisgIF9fcmV0XzI4NSA9IF9fbm9zd2FwX3ZzZXRfbGFuZV9mNjQoX196XzI4NSwgX19zMF8yODUsIDApOyBcCisgIF9fcmV0XzI4NTsgXAorfSkKKyNlbmRpZgorCisjZW5kaWYKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MTZ4OF90IHZhYmFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRsX3U4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50MTZ4OF90IHZhYmFsX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4OF90IF9fcDEsIHVpbnQ4eDhfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDhfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgdWludDh4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRsX3U4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIHVpbnQxNng4X3QgX19ub3N3YXBfdmFiYWxfdTgodWludDE2eDhfdCBfX3AwLCB1aW50OHg4X3QgX19wMSwgdWludDh4OF90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdmFiZGxfdTgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWJhbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkbF91MzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQ2NHgyX3QgdmFiYWxfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDJfdCBfX3AxLCB1aW50MzJ4Ml90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxLCAwKTsKKyAgdWludDMyeDJfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkbF91MzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDY0eDJfdCBfX25vc3dhcF92YWJhbF91MzIodWludDY0eDJfdCBfX3AwLCB1aW50MzJ4Ml90IF9fcDEsIHVpbnQzMngyX3QgX19wMikgeworICB1aW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92YWJkbF91MzIoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDMyeDRfdCB2YWJhbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyB2YWJkbF91MTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFiYWxfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDRfdCBfX3AxLCB1aW50MTZ4NF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDE2eDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkbF91MTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgdWludDMyeDRfdCBfX25vc3dhcF92YWJhbF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4NF90IF9fcDEsIHVpbnQxNng0X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fcDAgKyBfX25vc3dhcF92YWJkbF91MTYoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50MTZ4OF90IHZhYmFsX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDhfdCBfX3AxLCBpbnQ4eDhfdCBfX3AyKSB7CisgIGludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgdmFiZGxfczgoX19wMSwgX19wMik7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDE2eDhfdCB2YWJhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQ4eDhfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IF9fcmV2MCArIF9fbm9zd2FwX3ZhYmRsX3M4KF9fcmV2MSwgX19yZXYyKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CitfX2FpIGludDE2eDhfdCBfX25vc3dhcF92YWJhbF9zOChpbnQxNng4X3QgX19wMCwgaW50OHg4X3QgX19wMSwgaW50OHg4X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIF9fbm9zd2FwX3ZhYmRsX3M4KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDY0eDJfdCB2YWJhbF9zMzIoaW50NjR4Ml90IF9fcDAsIGludDMyeDJfdCBfX3AxLCBpbnQzMngyX3QgX19wMikgeworICBpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRsX3MzMihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhYmFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgaW50MzJ4Ml90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDEsIDApOworICBpbnQzMngyX3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMSwgMCk7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkbF9zMzIoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50NjR4Ml90IF9fbm9zd2FwX3ZhYmFsX3MzMihpbnQ2NHgyX3QgX19wMCwgaW50MzJ4Ml90IF9fcDEsIGludDMyeDJfdCBfX3AyKSB7CisgIGludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdmFiZGxfczMyKF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWJhbF9zMTYoaW50MzJ4NF90IF9fcDAsIGludDE2eDRfdCBfX3AxLCBpbnQxNng0X3QgX19wMikgeworICBpbnQzMng0X3QgX19yZXQ7CisgIF9fcmV0ID0gX19wMCArIHZhYmRsX3MxNihfX3AxLCBfX3AyKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MzJ4NF90IHZhYmFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4NF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDMsIDIsIDEsIDApOworICBpbnQxNng0X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3JldjAgKyBfX25vc3dhcF92YWJkbF9zMTYoX19yZXYxLCBfX3JldjIpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KK19fYWkgaW50MzJ4NF90IF9fbm9zd2FwX3ZhYmFsX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4NF90IF9fcDEsIGludDE2eDRfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX3AwICsgX19ub3N3YXBfdmFiZGxfczE2KF9fcDEsIF9fcDIpOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDE2eDhfdCB2YWJhbF9oaWdoX3U4KHVpbnQxNng4X3QgX19wMCwgdWludDh4MTZfdCBfX3AxLCB1aW50OHgxNl90IF9fcDIpIHsKKyAgdWludDE2eDhfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJhbF91OChfX3AwLCB2Z2V0X2hpZ2hfdTgoX19wMSksIHZnZXRfaGlnaF91OChfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQxNng4X3QgdmFiYWxfaGlnaF91OCh1aW50MTZ4OF90IF9fcDAsIHVpbnQ4eDE2X3QgX19wMSwgdWludDh4MTZfdCBfX3AyKSB7CisgIHVpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQ4eDE2X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgMTUsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHVpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiYWxfdTgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3U4KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgdWludDY0eDJfdCB2YWJhbF9oaWdoX3UzMih1aW50NjR4Ml90IF9fcDAsIHVpbnQzMng0X3QgX19wMSwgdWludDMyeDRfdCBfX3AyKSB7CisgIHVpbnQ2NHgyX3QgX19yZXQ7CisgIF9fcmV0ID0gdmFiYWxfdTMyKF9fcDAsIHZnZXRfaGlnaF91MzIoX19wMSksIHZnZXRfaGlnaF91MzIoX19wMikpOworICByZXR1cm4gX19yZXQ7Cit9CisjZWxzZQorX19haSB1aW50NjR4Ml90IHZhYmFsX2hpZ2hfdTMyKHVpbnQ2NHgyX3QgX19wMCwgdWludDMyeDRfdCBfX3AxLCB1aW50MzJ4NF90IF9fcDIpIHsKKyAgdWludDY0eDJfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAzLCAyLCAxLCAwKTsKKyAgdWludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgdWludDY0eDJfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJhbF91MzIoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfdTMyKF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF91MzIoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworX19haSB1aW50MzJ4NF90IHZhYmFsX2hpZ2hfdTE2KHVpbnQzMng0X3QgX19wMCwgdWludDE2eDhfdCBfX3AxLCB1aW50MTZ4OF90IF9fcDIpIHsKKyAgdWludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJhbF91MTYoX19wMCwgdmdldF9oaWdoX3UxNihfX3AxKSwgdmdldF9oaWdoX3UxNihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIHVpbnQzMng0X3QgdmFiYWxfaGlnaF91MTYodWludDMyeDRfdCBfX3AwLCB1aW50MTZ4OF90IF9fcDEsIHVpbnQxNng4X3QgX19wMikgeworICB1aW50MzJ4NF90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MTZ4OF90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICB1aW50MzJ4NF90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmFsX3UxNihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF91MTYoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3UxNihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDMsIDIsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDE2eDhfdCB2YWJhbF9oaWdoX3M4KGludDE2eDhfdCBfX3AwLCBpbnQ4eDE2X3QgX19wMSwgaW50OHgxNl90IF9fcDIpIHsKKyAgaW50MTZ4OF90IF9fcmV0OworICBfX3JldCA9IHZhYmFsX3M4KF9fcDAsIHZnZXRfaGlnaF9zOChfX3AxKSwgdmdldF9oaWdoX3M4KF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50MTZ4OF90IHZhYmFsX2hpZ2hfczgoaW50MTZ4OF90IF9fcDAsIGludDh4MTZfdCBfX3AxLCBpbnQ4eDE2X3QgX19wMikgeworICBpbnQxNng4X3QgX19yZXYwOyAgX19yZXYwID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMCwgX19wMCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDh4MTZfdCBfX3JldjE7ICBfX3JldjEgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AxLCBfX3AxLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxLCAwKTsKKyAgaW50OHgxNl90IF9fcmV2MjsgIF9fcmV2MiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDIsIF9fcDIsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXQ7CisgIF9fcmV0ID0gX19ub3N3YXBfdmFiYWxfczgoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczgoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3M4KF9fcmV2MikpOworICBfX3JldCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcmV0LCBfX3JldCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KK19fYWkgaW50NjR4Ml90IHZhYmFsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IHZhYmFsX3MzMihfX3AwLCB2Z2V0X2hpZ2hfczMyKF9fcDEpLCB2Z2V0X2hpZ2hfczMyKF9fcDIpKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2Vsc2UKK19fYWkgaW50NjR4Ml90IHZhYmFsX2hpZ2hfczMyKGludDY0eDJfdCBfX3AwLCBpbnQzMng0X3QgX19wMSwgaW50MzJ4NF90IF9fcDIpIHsKKyAgaW50NjR4Ml90IF9fcmV2MDsgIF9fcmV2MCA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDAsIF9fcDAsIDEsIDApOworICBpbnQzMng0X3QgX19yZXYxOyAgX19yZXYxID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMSwgX19wMSwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldjI7ICBfX3JldjIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AyLCBfX3AyLCAzLCAyLCAxLCAwKTsKKyAgaW50NjR4Ml90IF9fcmV0OworICBfX3JldCA9IF9fbm9zd2FwX3ZhYmFsX3MzMihfX3JldjAsIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMzIoX19yZXYxKSwgX19ub3N3YXBfdmdldF9oaWdoX3MzMihfX3JldjIpKTsKKyAgX19yZXQgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3JldCwgX19yZXQsIDEsIDApOworICByZXR1cm4gX19yZXQ7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCitfX2FpIGludDMyeDRfdCB2YWJhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSB2YWJhbF9zMTYoX19wMCwgdmdldF9oaWdoX3MxNihfX3AxKSwgdmdldF9oaWdoX3MxNihfX3AyKSk7CisgIHJldHVybiBfX3JldDsKK30KKyNlbHNlCitfX2FpIGludDMyeDRfdCB2YWJhbF9oaWdoX3MxNihpbnQzMng0X3QgX19wMCwgaW50MTZ4OF90IF9fcDEsIGludDE2eDhfdCBfX3AyKSB7CisgIGludDMyeDRfdCBfX3JldjA7ICBfX3JldjAgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3AwLCBfX3AwLCAzLCAyLCAxLCAwKTsKKyAgaW50MTZ4OF90IF9fcmV2MTsgIF9fcmV2MSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fcDEsIF9fcDEsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDApOworICBpbnQxNng4X3QgX19yZXYyOyAgX19yZXYyID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19wMiwgX19wMiwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCk7CisgIGludDMyeDRfdCBfX3JldDsKKyAgX19yZXQgPSBfX25vc3dhcF92YWJhbF9zMTYoX19yZXYwLCBfX25vc3dhcF92Z2V0X2hpZ2hfczE2KF9fcmV2MSksIF9fbm9zd2FwX3ZnZXRfaGlnaF9zMTYoX19yZXYyKSk7CisgIF9fcmV0ID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19yZXQsIF9fcmV0LCAzLCAyLCAxLCAwKTsKKyAgcmV0dXJuIF9fcmV0OworfQorI2VuZGlmCisKKyNlbmRpZgorCisjdW5kZWYgX19haQorCisjZW5kaWYgLyogX19BUk1fTkVPTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDJpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4MmludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ODY1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDJpbnRyaW4uaApAQCAtMCwwICsxLDEyMTUgQEAKKy8qPT09LS0tLSBhdngyaW50cmluLmggLSBBVlgyIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDJpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYMklOVFJJTl9ICisjZGVmaW5lIF9fQVZYMklOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4MiIpKSkKKworLyogU1NFNCBNdWx0aXBsZSBQYWNrZWQgU3VtcyBvZiBBYnNvbHV0ZSBEaWZmZXJlbmNlLiAgKi8KKyNkZWZpbmUgX21tMjU2X21wc2FkYndfZXB1OChYLCBZLCBNKSBfX2J1aWx0aW5faWEzMl9tcHNhZGJ3MjU2KChYKSwgKFkpLCAoTSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWJzX2VwaTgoX19tMjU2aSBfX2EpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhYnNiMjU2KChfX3YzMnFpKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWJzX2VwaTE2KF9fbTI1NmkgX19hKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWJzdzI1NigoX192MTZoaSlfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Fic19lcGkzMihfX20yNTZpIF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFic2QyNTYoKF9fdjhzaSlfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3BhY2tzX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wYWNrc19lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3BhY2t1c19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGFja3VzX2VwaTMyKF9fbTI1NmkgX19WMSwgX19tMjU2aSBfX1YyKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3MjU2KChfX3Y4c2kpX19WMSwgKF9fdjhzaSlfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjMycWkpX19hICsgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YxNmhpKV9fYSArIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192OHNpKV9fYSArIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZHNfZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWRkc2IyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZHNfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFkZHN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hZGRzX2VwdTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGFkZHVzYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkc19lcHUxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWRkdXN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworI2RlZmluZSBfbW0yNTZfYWxpZ25yX2VwaTgoYSwgYiwgbikgX19leHRlbnNpb25fXyAoeyAgICAgICAgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wYWxpZ25yMjU2KChfX3YzMnFpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMnFpKShfX20yNTZpKShiKSwgKG4pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRfc2kyNTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FuZG5vdF9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiB+X19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2F2Z19lcHU4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BhdmdiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hdmdfZXB1MTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGF2Z3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2JsZW5kdl9lcGk4KF9fbTI1NmkgX19WMSwgX19tMjU2aSBfX1YyLCBfX20yNTZpIF9fTSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BibGVuZHZiMjU2KChfX3YzMnFpKV9fVjEsIChfX3YzMnFpKV9fVjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpX19NKTsKK30KKworI2RlZmluZSBfbW0yNTZfYmxlbmRfZXBpMTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2aGkpKF9fbTI1NmkpKFYxKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShWMiksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gMTYgOiAwKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDE3IDogMSksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwNCkgPyAxOCA6IDIpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTkgOiAzKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDEwKSA/IDIwIDogNCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgyMCkgPyAyMSA6IDUpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMjIgOiA2KSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDgwKSA/IDIzIDogNyksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAyNCA6IDgpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gMjUgOiA5KSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDI2IDogMTApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyAyNyA6IDExKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMjggOiAxMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDIwKSA/IDI5IDogMTMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg0MCkgPyAzMCA6IDE0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMzEgOiAxNSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YzMnFpKV9fYSA9PSAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192MTZoaSlfX2EgPT0gKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjhzaSlfX2EgPT0gKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGVxX2VwaTY0KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBhbHdheXMgcGVyZm9ybXMgYSBzaWduZWQgY29tcGFyaXNvbiwgYnV0IF9fdjMycWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YzMnFzLiAqLworICByZXR1cm4gKF9fbTI1NmkpKChfX3YzMnFzKV9fYSA+IChfX3YzMnFzKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YxNmhpKV9fYSA+IChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y4c2kpX19hID4gKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGd0X2VwaTY0KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX2EgPiBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hhZGRfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9waGFkZHcyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hhZGRfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9waGFkZGQyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oYWRkc19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BoYWRkc3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hzdWJfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9waHN1YncyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hzdWJfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9waHN1YmQyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oc3Vic19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Boc3Vic3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hZGR1YnNfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICAgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cyNTYoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hZGRfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1hZGR3ZDI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1heHNiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1heHN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1heHNkMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwdTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1heHViMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfZXB1MTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1heHV3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfZXB1MzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1heHVkMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1pbnNiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9taW5fZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1pbnN3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9taW5fZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1pbnNkMjU2KChfX3Y4c2kpX19hLCAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX2VwdTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1pbnViMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9taW5fZXB1MTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG1pbnV3MjU2ICgoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX2VwdTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtaW51ZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92ZW1hc2tfZXBpOChfX20yNTZpIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Btb3Ztc2tiMjU2KChfX3YzMnFpKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpOF9lcGkxNihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJ3MjU2KChfX3YxNnFpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpOF9lcGkzMihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJkMjU2KChfX3YxNnFpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpOF9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJxMjU2KChfX3YxNnFpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpMTZfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbW92c3h3ZDI1NigoX192OGhpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpMTZfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbW92c3h3cTI1NigoX192OGhpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpMzJfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbW92c3hkcTI1NigoX192NHNpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1OF9lcGkxNihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJ3MjU2KChfX3YxNnFpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1OF9lcGkzMihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJkMjU2KChfX3YxNnFpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1OF9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJxMjU2KChfX3YxNnFpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1MTZfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbW92enh3ZDI1NigoX192OGhpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1MTZfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbW92enh3cTI1NigoX192OGhpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1MzJfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbW92enhkcTI1NigoX192NHNpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bF9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wbXVsZHEyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tdWxocnNfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcG11bGhyc3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bGhpX2VwdTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtdWxodXcyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bGhpX2VwaTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BtdWxodzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsbG9fZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3YxNmhpKV9fYSAqIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bGxvX2VwaTMyIChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjhzaSlfX2EgKiAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsX2VwdTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHEyNTYoKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9vcl9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2FkX2VwdTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcHNhZGJ3MjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zaHVmZmxlX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNodWZiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworI2RlZmluZSBfbW0yNTZfc2h1ZmZsZV9lcGkzMihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltbSkgJiAweDMsICgoaW1tKSAmIDB4YykgPj4gMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDMwKSA+PiA0LCAoKGltbSkgJiAweGMwKSA+PiA2LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pICYgMHgwMykgPj4gMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgJiAweDBjKSA+PiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSAmIDB4MzApID4+IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pICYgMHhjMCkgPj4gNikpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9zaHVmZmxlaGlfZXBpMTYoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2aGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSAmIDB4MDMpID4+IDApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pICYgMHgwYykgPj4gMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgJiAweDMwKSA+PiA0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSAmIDB4YzApID4+IDYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIDksIDEwLCAxMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgJiAweDAzKSA+PiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgJiAweDBjKSA+PiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgJiAweDMwKSA+PiA0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiArICgoKGltbSkgJiAweGMwKSA+PiA2KSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3NodWZmbGVsb19lcGkxNihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpX21tMjU2X3NldHplcm9fc2kyNTYoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSAmIDB4MywoKGltbSkgJiAweGMpID4+IDIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pICYgMHgzMCkgPj4gNCwgKChpbW0pICYgMHhjMCkgPj4gNiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2LCA3LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pICYgMHgwMykgPj4gMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCArICgoKGltbSkgJiAweDBjKSA+PiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICsgKCgoaW1tKSAmIDB4MzApID4+IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggKyAoKChpbW0pICYgMHhjMCkgPj4gNiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIsIDEzLCAxNCwgMTUpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NpZ25fZXBpOChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzaWduYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2lnbl9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzaWdudzI1NigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2lnbl9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzaWduZDI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCisjZGVmaW5lIF9tbTI1Nl9zbGxpX3NpMjU2KGEsIGNvdW50KSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbGRxaTI1NigoX19tMjU2aSkoYSksIChjb3VudCkqOCk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2JzbGxpX2VwaTEyOChhLCBjb3VudCkgX21tMjU2X3NsbGlfc2kyNTYoKGEpLCAoY291bnQpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbGlfZXBpMTYoX19tMjU2aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbHdpMjU2KChfX3YxNmhpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsX2VwaTE2KF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsdzI1NigoX192MTZoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsaV9lcGkzMihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsZGkyNTYoKF9fdjhzaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbF9lcGkzMihfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbGQyNTYoKF9fdjhzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsaV9lcGk2NChfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2xscWkyNTYoX19hLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zbGxfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzbGxxMjU2KF9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JhaV9lcGkxNihfX20yNTZpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3Jhd2kyNTYoKF9fdjE2aGkpX19hLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmFfZXBpMTYoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmF3MjU2KChfX3YxNmhpKV9fYSwgKF9fdjhoaSlfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmFpX2VwaTMyKF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmFkaTI1NigoX192OHNpKV9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JhX2VwaTMyKF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhZDI1NigoX192OHNpKV9fYSwgKF9fdjRzaSlfX2NvdW50KTsKK30KKworI2RlZmluZSBfbW0yNTZfc3JsaV9zaTI1NihhLCBjb3VudCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmxkcWkyNTYoKF9fbTI1NmkpKGEpLCAoY291bnQpKjgpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9ic3JsaV9lcGkxMjgoYSwgY291bnQpIF9tbTI1Nl9zcmxpX3NpMjU2KChhKSwgKGNvdW50KSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmxpX2VwaTE2KF9fbTI1NmkgX19hLCBpbnQgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Bzcmx3aTI1NigoX192MTZoaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybF9lcGkxNihfX20yNTZpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHcyNTYoKF9fdjE2aGkpX19hLCAoX192OGhpKV9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybGlfZXBpMzIoX19tMjU2aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybGRpMjU2KChfX3Y4c2kpX19hLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmxfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzcmxkMjU2KChfX3Y4c2kpX19hLCAoX192NHNpKV9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybGlfZXBpNjQoX19tMjU2aSBfX2EsIGludCBfX2NvdW50KQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcHNybHFpMjU2KF9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3JsX2VwaTY0KF9fbTI1NmkgX19hLCBfX20xMjhpIF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc3JscTI1NihfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1Yl9lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSgoX192MzJxaSlfX2EgLSAoX192MzJxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1Yl9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoKF9fdjE2aGkpX19hIC0gKF9fdjE2aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJfZXBpMzIoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpKChfX3Y4c2kpX19hIC0gKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1Yl9lcGk2NChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Vic19lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzdWJzYjI1NigoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Vic19lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3Vic3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N1YnNfZXB1OChfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3VidXNiMjU2KChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJzX2VwdTE2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cyNTYoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2hpX2VwaTgoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDgsIDMyKzgsIDksIDMyKzksIDEwLCAzMisxMCwgMTEsIDMyKzExLCAxMiwgMzIrMTIsIDEzLCAzMisxMywgMTQsIDMyKzE0LCAxNSwgMzIrMTUsIDI0LCAzMisyNCwgMjUsIDMyKzI1LCAyNiwgMzIrMjYsIDI3LCAzMisyNywgMjgsIDMyKzI4LCAyOSwgMzIrMjksIDMwLCAzMiszMCwgMzEsIDMyKzMxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2toaV9lcGkxNihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNCwgMTYrNCwgNSwgMTYrNSwgNiwgMTYrNiwgNywgMTYrNywgMTIsIDE2KzEyLCAxMywgMTYrMTMsIDE0LCAxNisxNCwgMTUsIDE2KzE1KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2toaV9lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDIsIDgrMiwgMywgOCszLCA2LCA4KzYsIDcsIDgrNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNraGlfZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDEsIDQrMSwgMywgNCszKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2tsb19lcGk4KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAwLCAzMiswLCAxLCAzMisxLCAyLCAzMisyLCAzLCAzMiszLCA0LCAzMis0LCA1LCAzMis1LCA2LCAzMis2LCA3LCAzMis3LCAxNiwgMzIrMTYsIDE3LCAzMisxNywgMTgsIDMyKzE4LCAxOSwgMzIrMTksIDIwLCAzMisyMCwgMjEsIDMyKzIxLCAyMiwgMzIrMjIsIDIzLCAzMisyMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNrbG9fZXBpMTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2aGkpX19hLCAoX192MTZoaSlfX2IsIDAsIDE2KzAsIDEsIDE2KzEsIDIsIDE2KzIsIDMsIDE2KzMsIDgsIDE2KzgsIDksIDE2KzksIDEwLCAxNisxMCwgMTEsIDE2KzExKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2tsb19lcGkzMihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDAsIDgrMCwgMSwgOCsxLCA0LCA4KzQsIDUsIDgrNSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNrbG9fZXBpNjQoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDAsIDQrMCwgMiwgNCsyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl94b3Jfc2kyNTYoX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0cmVhbV9sb2FkX3NpMjU2KF9fbTI1NmkgY29uc3QgKl9fVikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX21vdm50ZHFhMjU2KChjb25zdCBfX3Y0ZGkgKilfX1YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYnJvYWRjYXN0c3NfcHMoX19tMTI4IF9fWCkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZilfX1gsIChfX3Y0c2YpX19YLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3RzZF9wZChfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdHNzX3BzKF9fbTEyOCBfX1gpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2YpX19YLCAoX192NHNmKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0c2RfcGQoX19tMTI4ZCBfX1gpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKV9fWCwgKF9fdjJkZilfX1gsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdHNpMTI4X3NpMjU2KF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19YLCBfX1gsIDAsIDEsIDAsIDEpOworfQorCisjZGVmaW5lIF9tbV9ibGVuZF9lcGkzMihWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKShfX20xMjhpKShWMSksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKFYyKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/IDQgOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gNSA6IDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwNCkgPyA2IDogMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDcgOiAzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2JsZW5kX2VwaTMyKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2kpKF9fbTI1NmkpKFYxKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKFYyKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAgOCA6IDApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyAgOSA6IDEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwNCkgPyAxMCA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwOCkgPyAxMSA6IDMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgxMCkgPyAxMiA6IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgyMCkgPyAxMyA6IDUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg0MCkgPyAxNCA6IDYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHg4MCkgPyAxNSA6IDcpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RiX2VwaTgoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSlfX1gsIChfX3YxNnFpKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0d19lcGkxNihfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19YLCAoX192OGhpKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0ZF9lcGkzMihfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0cV9lcGk2NChfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fWCwgX19YLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3RiX2VwaTgoX19tMTI4aSBfX1gpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSlfX1gsIChfX3YxNnFpKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYnJvYWRjYXN0d19lcGkxNihfX20xMjhpIF9fWCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19YLCAoX192OGhpKV9fWCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3RkX2VwaTMyKF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19YLCAwLCAwLCAwLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9icm9hZGNhc3RxX2VwaTY0KF9fbTEyOGkgX19YKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19YLCBfX1gsIDAsIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV2YXI4eDMyX2VwaTMyKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Blcm12YXJzaTI1NigoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlNHg2NF9wZChWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkZikoX19tMjU2ZCkoViksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNKSAmIDB4MywgKChNKSAmIDB4YykgPj4gMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0pICYgMHgzMCkgPj4gNCwgKChNKSAmIDB4YzApID4+IDYpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXZhcjh4MzJfcHMoX19tMjU2IF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3Blcm12YXJzZjI1NigoX192OHNmKV9fYSwgKF9fdjhzaSlfX2IpOworfQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlNHg2NF9lcGk2NChWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkaSkoX19tMjU2aSkoViksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNKSAmIDB4MywgKChNKSAmIDB4YykgPj4gMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE0pICYgMHgzMCkgPj4gNCwgKChNKSAmIDB4YzApID4+IDYpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlMngxMjhfc2kyNTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcGVybXRpMjU2KChfX20yNTZpKShWMSksIChfX20yNTZpKShWMiksIChNKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2V4dHJhY3RpMTI4X3NpMjU2KFYsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRpKShfX20yNTZpKShWKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAxKSA/IDIgOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gMyA6IDEpICk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2luc2VydGkxMjhfc2kyNTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkaSkoX19tMjU2aSkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpX21tMjU2X2Nhc3RzaTEyOF9zaTI1NigoX19tMTI4aSkoVjIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gMCA6IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMSkgPyAxIDogNSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAxKSA/IDQgOiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDEpID8gNSA6IDMpICk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza2xvYWRfZXBpMzIoaW50IGNvbnN0ICpfX1gsIF9fbTI1NmkgX19NKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfbWFza2xvYWRkMjU2KChjb25zdCBfX3Y4c2kgKilfX1gsIChfX3Y4c2kpX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrbG9hZF9lcGk2NChsb25nIGxvbmcgY29uc3QgKl9fWCwgX19tMjU2aSBfX00pCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9tYXNrbG9hZHEyNTYoKGNvbnN0IF9fdjRkaSAqKV9fWCwgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrbG9hZF9lcGkzMihpbnQgY29uc3QgKl9fWCwgX19tMTI4aSBfX00pCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9tYXNrbG9hZGQoKGNvbnN0IF9fdjRzaSAqKV9fWCwgKF9fdjRzaSlfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tsb2FkX2VwaTY0KGxvbmcgbG9uZyBjb25zdCAqX19YLCBfX20xMjhpIF9fTSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcSgoY29uc3QgX192MmRpICopX19YLCAoX192MmRpKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3N0b3JlX2VwaTMyKGludCAqX19YLCBfX20yNTZpIF9fTSwgX19tMjU2aSBfX1kpCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZWQyNTYoKF9fdjhzaSAqKV9fWCwgKF9fdjhzaSlfX00sIChfX3Y4c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrc3RvcmVfZXBpNjQobG9uZyBsb25nICpfX1gsIF9fbTI1NmkgX19NLCBfX20yNTZpIF9fWSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcTI1NigoX192NGRpICopX19YLCBfX00sIF9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3N0b3JlX2VwaTMyKGludCAqX19YLCBfX20xMjhpIF9fTSwgX19tMTI4aSBfX1kpCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZWQoKF9fdjRzaSAqKV9fWCwgKF9fdjRzaSlfX00sIChfX3Y0c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrc3RvcmVfZXBpNjQobG9uZyBsb25nICpfX1gsIF9fbTEyOGkgX19NLCBfX20xMjhpIF9fWSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcSgoIF9fdjJkaSAqKV9fWCwgX19NLCBfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NsbHZfZXBpMzIoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNsbHY4c2koKF9fdjhzaSlfX1gsIChfX3Y4c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGx2X2VwaTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGx2NHNpKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2xsdl9lcGk2NChfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc2xsdjRkaShfX1gsIF9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsdl9lcGk2NChfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsdjJkaShfX1gsIF9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3Jhdl9lcGkzMihfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9wc3JhdjhzaSgoX192OHNpKV9fWCwgKF9fdjhzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYXZfZXBpMzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYXY0c2koKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zcmx2X2VwaTMyKF9fbTI1NmkgX19YLCBfX20yNTZpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3Bzcmx2OHNpKChfX3Y4c2kpX19YLCAoX192OHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Jsdl9lcGkzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsdjRzaSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NybHZfZXBpNjQoX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpX19idWlsdGluX2lhMzJfcHNybHY0ZGkoX19YLCBfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybHZfZXBpNjQoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHYyZGkoX19YLCBfX1kpOworfQorCisjZGVmaW5lIF9tbV9tYXNrX2kzMmdhdGhlcl9wZChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wZCgoX192MmRmKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMmdhdGhlcl9wZChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9wZDI1NigoX192NGRmKShfX20yNTZkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2k2NGdhdGhlcl9wZChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZ2F0aGVycV9wZCgoX192MmRmKShfX20xMjhkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2k2NGdhdGhlcl9wZChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfZ2F0aGVycV9wZDI1NigoX192NGRmKShfX20yNTZkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2kzMmdhdGhlcl9wcyhhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BzKChfX3Y0c2YpKF9fbTEyOCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyZ2F0aGVyX3BzKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcHMyNTYoKF9fdjhzZikoX19tMjU2KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRnYXRoZXJfcHMoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2F0aGVycV9wcygoX192NHNmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2k2NGdhdGhlcl9wcyhhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BzMjU2KChfX3Y0c2YpKF9fbTEyOCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTMyZ2F0aGVyX2VwaTMyKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX2QoKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pMzJnYXRoZXJfZXBpMzIoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfZDI1NigoX192OHNpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2k2NGdhdGhlcl9lcGkzMihhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfZ2F0aGVycV9kKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTY0Z2F0aGVyX2VwaTMyKGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX2QyNTYoKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJnYXRoZXJfZXBpNjQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcSgoX192MmRpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2kzMmdhdGhlcl9lcGk2NChhLCBtLCBpLCBtYXNrLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9xMjU2KChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkobWFzayksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0Z2F0aGVyX2VwaTY0KGEsIG0sIGksIG1hc2ssIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3EoKF9fdjJkaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShtYXNrKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRnYXRoZXJfZXBpNjQoYSwgbSwgaSwgbWFzaywgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcTI1NigoX192NGRpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKG1hc2spLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9pMzJnYXRoZXJfcGQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcGQoKF9fdjJkZilfbW1fdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9jbXBlcV9wZChfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQoKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pMzJnYXRoZXJfcGQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcGQyNTYoKF9fdjRkZilfbW0yNTZfdW5kZWZpbmVkX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9jbXBfcGQoX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DTVBfRVFfT1EpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKKworI2RlZmluZSBfbW1faTY0Z2F0aGVyX3BkKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BkKChfX3YyZGYpX21tX3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fY21wZXFfcGQoX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkKCkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTY0Z2F0aGVyX3BkKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BkMjU2KChfX3Y0ZGYpX21tMjU2X3VuZGVmaW5lZF9wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZilfbW0yNTZfY21wX3BkKF9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ01QX0VRX09RKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCisKKyNkZWZpbmUgX21tX2kzMmdhdGhlcl9wcyhtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3BzKChfX3Y0c2YpX21tX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9jbXBlcV9wcyhfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcygpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTMyZ2F0aGVyX3BzKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2dhdGhlcmRfcHMyNTYoKF9fdjhzZilfbW0yNTZfdW5kZWZpbmVkX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpX21tMjU2X2NtcF9wcyhfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DTVBfRVFfT1EpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykpOyB9KQorCisjZGVmaW5lIF9tbV9pNjRnYXRoZXJfcHMobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfZ2F0aGVycV9wcygoX192NHNmKV9tbV91bmRlZmluZWRfcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0IGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fY21wZXFfcHMoX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMoKSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2k2NGdhdGhlcl9wcyhtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3BzMjU2KChfX3Y0c2YpX21tX3VuZGVmaW5lZF9wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9jbXBlcV9wcyhfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcygpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMpKTsgfSkKKworI2RlZmluZSBfbW1faTMyZ2F0aGVyX2VwaTMyKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX2QoKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXQxX2VwaTMyKC0xKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTMyZ2F0aGVyX2VwaTMyKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX2QyNTYoKF9fdjhzaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIChfX3Y4c2kpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXQxX2VwaTMyKC0xKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1faTY0Z2F0aGVyX2VwaTMyKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX2QoKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIChfX3YyZGkpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXQxX2VwaTMyKC0xKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTY0Z2F0aGVyX2VwaTMyKG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX2QyNTYoKF9fdjRzaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgY29uc3QgKikobSksIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXQxX2VwaTMyKC0xKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW1faTMyZ2F0aGVyX2VwaTY0KG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJkX3EoKF9fdjJkaSlfbW1fdW5kZWZpbmVkX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKV9tbV9zZXQxX2VwaTY0eCgtMSksIChzKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMmdhdGhlcl9lcGk2NChtLCBpLCBzKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfZ2F0aGVyZF9xMjU2KChfX3Y0ZGkpX21tMjU2X3VuZGVmaW5lZF9zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nIGNvbnN0ICopKG0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfbW0yNTZfc2V0MV9lcGk2NHgoLTEpLCAocykpOyB9KQorCisjZGVmaW5lIF9tbV9pNjRnYXRoZXJfZXBpNjQobSwgaSwgcykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2dhdGhlcnFfcSgoX192MmRpKV9tbV91bmRlZmluZWRfc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZyBjb25zdCAqKShtKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoaSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpX21tX3NldDFfZXBpNjR4KC0xKSwgKHMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTY0Z2F0aGVyX2VwaTY0KG0sIGksIHMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9nYXRoZXJxX3EyNTYoKF9fdjRkaSlfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcgY29uc3QgKikobSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKV9tbTI1Nl9zZXQxX2VwaTY0eCgtMSksIChzKSk7IH0pCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fQVZYMklOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmJ3aW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmJ3aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4OWVkNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyYndpbnRyaW4uaApAQCAtMCwwICsxLDE1NDIgQEAKKy8qPT09LS0tLS0tLS0tLS0tLSBhdng1MTJid2ludHJpbi5oIC0gQVZYNTEyQlcgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyYndpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyQldJTlRSSU5fSAorI2RlZmluZSBfX0FWWDUxMkJXSU5UUklOX0gKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX19tbWFzazMyOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX19tbWFzazY0OwordHlwZWRlZiBjaGFyIF9fdjY0cWkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoNjQpKSk7Cit0eXBlZGVmIHNob3J0IF9fdjMyaGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoNjQpKSk7CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyYnciKSkpCisKK3N0YXRpYyAgX19pbmxpbmUgX192NjRxaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXR6ZXJvX3FpKHZvaWQpIHsKKyAgcmV0dXJuIChfX3Y2NHFpKXsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworfQorCitzdGF0aWMgIF9faW5saW5lIF9fdjMyaGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0emVyb19oaSh2b2lkKSB7CisgIHJldHVybiAoX192MzJoaSl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK30KKworLyogSW50ZWdlciBjb21wYXJlICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBlcV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZXFfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGVxdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBlcXc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBlcV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBnZV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ2VfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBnZV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBndF9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ3RfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfcGNtcGd0dzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3BjbXBndHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBndF9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsZV9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbGVfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsZV9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcGk4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsdF9lcGk4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwdThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfdWNtcGI1MTJfbWFzaygoX192NjRxaSlfX2EsIChfX3Y2NHFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbHRfZXBpMTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2szMiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcHUxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsdF9lcHUxNl9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKV9fYSwgKF9fdjMyaGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBuZXFfZXBpOF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s2NClfX2J1aWx0aW5faWEzMl9jbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazY0KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwaThfbWFzayhfX21tYXNrNjQgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrNjQpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKV9fYSwgKF9fdjY0cWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcHU4X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s2NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcG5lcV9lcHU4X21hc2soX19tbWFzazY0IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazY0KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpX19hLCAoX192NjRxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcGkxNl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwaTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2szMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBuZXFfZXB1MTZfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcHc1MTJfbWFzaygoX192MzJoaSlfX2EsIChfX3YzMmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwdTE2X21hc2soX19tbWFzazMyIF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXB3NTEyX21hc2soKF9fdjMyaGkpX19hLCAoX192MzJoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRfZXBpOCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3Y2NHFpKSBfX0EgKyAoX192NjRxaSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3ViX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpICgoX192NjRxaSkgX19BIC0gKF9fdjY0cWkpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3YzMmhpKSBfX0EgKyAoX192MzJoaSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpICgoX192MzJoaSkgX19BIC0gKF9fdjMyaGkpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3N1Yl9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1Ync1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsbG9fZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpICgoX192MzJoaSkgX19BICogKF9fdjMyaGkpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxsb19lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGxvX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19ibGVuZF9lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYmxlbmRtYl81MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2JsZW5kX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX1cpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfYmxlbmRtd181MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hYnNfZXBpOCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Fic19lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hYnNfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWJzX2VwaTE2IChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWJzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hYnNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3BhY2tzX2VwaTMyIChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3NzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wYWNrc19lcGkzMiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGFja3NfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3BhY2tzX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3BhY2tzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9wYWNrc19lcGkxNiAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3BhY2t1c19lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3NTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGFja3VzX2VwaTMyIChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3VzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19wYWNrdXNfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3VzZHc1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wYWNrdXNfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfcGFja3VzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGFja3VzX2VwaTE2IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFja3Vzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWRkc19lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRzX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkc19lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZHNfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZHNfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FkZHNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWRkc19lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZHVzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYWRkc19lcHU4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRzX2VwdTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZHNfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRzX2VwdTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkc19lcHUxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYXZnX2VwdTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYXZnX2VwdTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZnYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2F2Z19lcHU4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGF2Z2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYXZnX2VwdTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGF2Z3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2F2Z19lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYXZndzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2F2Z19lcHUxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWF4X2VwaTggKF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYXhfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21heF9lcGkxNiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21heF9lcGkxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXB1OCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21heF9lcHU4IChfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHViNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWF4X2VwdTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYXhfZXB1MTYgKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYXhfZXB1MTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9taW5fZXBpOCAoX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9lcGk4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWluX2VwaTE2IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbWluX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21pbl9lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnViNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbWluX2VwdTggKF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludWI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19taW5fZXB1OCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51YjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21pbl9lcHUxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21pbl9lcHUxNiAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX21pbl9lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BLAorICAgICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zaHVmZmxlX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3NodWZmbGVfZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zaHVmZmxlX2VwaTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmI1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3Vic19lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJzX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3Vic19lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N1YnNfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N1YnNfZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3N1YnNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3Vic19lcHU4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YnVzYjUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3Vic19lcHU4IChfX201MTJpIF9fVywgX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2I1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zdWJzX2VwdTggKF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXNiNTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N1YnNfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJzX2VwdTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3Vic19lcHUxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazJfcGVybXV0ZXgydmFyX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksCisgICAgICAgICBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyaGk1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fSSAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGk1MTJfbWFzayAoKF9fdjMyaGkpIF9fSSAvKiBpZHggKi8sCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tNTEyaSBfX0EsIF9fbW1hc2szMiBfX1UsCisgICAgICAgIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGk1MTJfbWFzayAoKF9fdjMyaGkpIF9fSSAvKiBpZHggKi8sCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfcGVybXV0ZXgydmFyX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGk1MTJfbWFza3ogKChfX3YzMmhpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxocnNfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsaHJzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsaHJzX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGhyc3c1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsaGlfZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bGhpX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGh3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YzMmhpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsaGlfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsaGlfZXB1MTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3NTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxoaV9lcHUxNiAoX19tNTEyaSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxoaV9lcHUxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXc1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFkZHVic19lcGkxNiAoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3NTEyX21hc2sgKChfX3Y2NHFpKSBfX1gsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1ksCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYWRkdWJzX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX1gsCisgICAgICAgICBfX201MTJpIF9fWSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzUxMl9tYXNrICgoX192NjRxaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X21hZGR1YnNfZXBpMTYgKF9fbW1hc2szMiBfX1UsIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzUxMl9tYXNrICgoX192NjRxaSkgX19YLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19ZLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYWRkX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tYWRkX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsCisgICAgICBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tYWRkX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHNlcGkxNl9lcGk4IChfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRzZXBpMTZfZXBpOCAoX19tMjU2aSBfX08sIF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpX19PLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRzZXBpMTZfZXBpOCAoX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0dXNlcGkxNl9lcGk4IChfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dXNlcGkxNl9lcGk4IChfX20yNTZpIF9fTywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnR1c2VwaTE2X2VwaTggKF9fbW1hc2szMiBfX00sIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwaTE2X2VwaTggKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1vdndiNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAoX19tbWFzazMyKSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcGkxNl9lcGk4IChfX20yNTZpIF9fTywgX19tbWFzazMyIF9fTSwgX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbW92d2I1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjMycWkpIF9fTywKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGkxNl9lcGk4IChfX21tYXNrMzIgX19NLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2toaV9lcGk4IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2toYnc1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX2VwaTggKF9fbTUxMmkgX19XLCBfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHVucGNraGJ3NTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfdW5wYWNraGlfZXBpOCAoX19tbWFzazY0IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHVucGNraGJ3NTEyX21hc2sgKChfX3Y2NHFpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y2NHFpKSBfbW01MTJfc2V0emVyb19xaSgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazY0KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VucGFja2hpX2VwaTE2IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3VucGFja2hpX2VwaTE2IChfX201MTJpIF9fVywgX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsCisgICAgICAgICAgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel91bnBhY2toaV9lcGkxNiAoX19tbWFzazMyIF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHVucGNraHdkNTEyX21hc2sgKChfX3YzMmhpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3YzMmhpKSBfbW01MTJfc2V0emVyb19oaSgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VucGFja2xvX2VwaTggKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2xidzUxMl9tYXNrICgoX192NjRxaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192NjRxaSkgX21tNTEyX3NldHplcm9fcWkoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdW5wYWNrbG9fZXBpOCAoX19tNTEyaSBfX1csIF9fbW1hc2s2NCBfX1UsIF9fbTUxMmkgX19BLAorICAgICAgICAgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsYnc1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s2NCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel91bnBhY2tsb19lcGk4IChfX21tYXNrNjQgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsYnc1MTJfbWFzayAoKF9fdjY0cWkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjY0cWkpIF9tbTUxMl9zZXR6ZXJvX3FpKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrNjQpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNrbG9fZXBpMTYgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX21tNTEyX3NldHplcm9faGkoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2szMikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfdW5wYWNrbG9fZXBpMTYgKF9fbTUxMmkgX19XLCBfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwKKyAgICAgICAgICBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDUxMl9tYXNrICgoX192MzJoaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19CLAorICAgICAgICAgICAgICAgICAoX192MzJoaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X3VucGFja2xvX2VwaTE2IChfX21tYXNrMzIgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2Q1MTJfbWFzayAoKF9fdjMyaGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjMyaGkpIF9tbTUxMl9zZXR6ZXJvX2hpKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tNTEyX2NtcF9lcGk4X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazY0KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXBpOF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGI1MTJfbWFzaygoX192NjRxaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s2NCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfZXB1OF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiNTEyX21hc2soKF9fdjY0cWkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NjRxaSkoX19tNTEyaSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s2NCktMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX2VwdThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjUxMl9tYXNrKChfX3Y2NHFpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjY0cWkpKF9fbTUxMmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrNjQpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwaTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJoaSkoX19tNTEyaSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazMyKS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXBpMTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3NTEyX21hc2soKF9fdjMyaGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMzIpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwdTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHc1MTJfbWFzaygoX192MzJoaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YzMmhpKShfX201MTJpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazMyKS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXB1MTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzUxMl9tYXNrKChfX3YzMmhpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMyaGkpKF9fbTUxMmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMzIpKG0pKTsgfSkKKworCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJjZGludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJjZGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTRiMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmNkaW50cmluLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qPT09LS0tLS0tLS0tLS0tLSBhdng1MTJjZGludHJpbi5oIC0gQVZYNTEyQ0QgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyY2RpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyQ0RJTlRSSU5fSAorI2RlZmluZSBfX0FWWDUxMkNESU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJjZCIpKSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jb25mbGljdF9lcGk2NCAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdGRpXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NvbmZsaWN0X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0ZGlfNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jb25mbGljdF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGNvbmZsaWN0ZGlfNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jb25mbGljdF9lcGkzMiAoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdHNpXzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NvbmZsaWN0X2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBjb25mbGljdHNpXzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY29uZmxpY3RfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwY29uZmxpY3RzaV81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2x6Y250X2VwaTMyIChfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250ZF81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbHpjbnRfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGx6Y250ZF81MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9semNudF9lcGkzMiAoX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBsemNudGRfNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbHpjbnRfZXBpNjQgKF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwbHpjbnRxXzUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19semNudF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBsemNudHFfNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbHpjbnRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfdnBsemNudHFfNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJkcWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJkcWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZWU0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmRxaW50cmluLmgKQEAgLTAsMCArMSw3NzggQEAKKy8qPT09LS0tLSBhdng1MTJkcWludHJpbi5oIC0gQVZYNTEyRFEgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGF2eDUxMmRxaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWDUxMkRRSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJEUUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyZHEiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsbG9fZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpICgoX192OGRpKSBfX0EgKiAoX192OGRpKSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsbG9fZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxscTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbXVsbG9fZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGxxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3hvcl9wZCAoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgKChfX3Y4ZGkpIF9fQSBeIChfX3Y4ZGkpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza194b3JfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3hvcnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel94b3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfeG9ycGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3hvcl9wcyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgKChfX3YxNnNpKSBfX0EgXiAoX192MTZzaSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfeG9yX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl94b3JwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfeG9yX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl94b3JwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX29yX3BkIChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSAoKF9fdjhkaSkgX19BIHwgKF9fdjhkaSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX29yX3BkIChfX201MTJkIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9vcnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9vcl9wZCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9vcnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX29yX3BzIChfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSAoKF9fdjE2c2kpIF9fQSB8IChfX3YxNnNpKSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19vcl9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfb3JwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfb3JfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX29ycHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZF9wZCAoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgKChfX3Y4ZGkpIF9fQSAmIChfX3Y4ZGkpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hbmRfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FuZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYW5kcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZF9wcyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgKChfX3YxNnNpKSBfX0EgJiAoX192MTZzaSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kX3BzIChfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hbmRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kX3BzIChfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hbmRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZG5vdF9wZCAoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYW5kbnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hbmRub3RfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kbm90X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZG5vdF9wcyAoX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYW5kbnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZG5vdF9wcyAoX19tNTEyIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYW5kbnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hbmRub3RfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2FuZG5wczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRwZF9lcGk2NCAoX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRwZF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwZF9lcGk2NChfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcGRfZXBpNjQoX19XLCBfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBkX2VwaTY0KF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsICAgICAgICBcCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGRfZXB1NjQgKF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHBkX2VwdTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGRfZXB1NjQoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dF9yb3VuZHBkX2VwdTY0KF9fVywgX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kcGRfZXB1NjQoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgXAorICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHBzX2VwaTY0IChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cHNfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfY3Z0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBzX2VwaTY0KF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgIFwKKyAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kcHNfZXBpNjQoX19XLCBfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX2VwaTY0KF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cHNfZXB1NjQgKF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0cHNfZXB1NjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHBzX2VwdTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcHNfZXB1NjQoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgIFwKKyAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgLTEsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRwc19lcHU2NChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZHBzX2VwdTY0KF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpNjRfcGQgKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXBpNjRfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwaTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXBpNjRfcGQoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRlcGk2NF9wZChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXBpNjRfcGQoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpNjRfcHMgKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dGVwaTY0X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcGk2NF9wcyAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXBpNjRfcHMoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgIFwKKyAgKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kZXBpNjRfcHMoX19XLCBfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXBpNjRfcHMoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cGRfZXBpNjQgKF9fbTUxMmQgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwZF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcGRfZXBpNjQoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgXAorICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dHRfcm91bmRwZF9lcGk2NChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnR0X3JvdW5kcGRfZXBpNjQoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0dHBkX2VwdTY0IChfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0dHBkX2VwdTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX201MTJkIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0dF9yb3VuZHBkX2VwdTY0KF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksIChfX21tYXNrOCkgLTEsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcGRfZXB1NjQoX19XLCBfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXE1MTJfbWFzayAoKF9fdjhkZikgX19BLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHRfcm91bmRwZF9lcHU2NChfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICAgXAorICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTUxMl9tYXNrICgoX192OGRmKSBfX0EsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHRwc19lcGk2NCAoX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnR0cHNfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwc19lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwc19lcGk2NChfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgIFwKKyAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2N2dHRfcm91bmRwc19lcGk2NChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9jdnR0X3JvdW5kcHNfZXBpNjQoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgXAorICAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cHNfZXB1NjQgKF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2N2dHRwc19lcHU2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dHRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTUxMl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnR0X3JvdW5kcHNfZXB1NjQoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfbW01MTJfc2V0emVyb19zaTUxMigpLChfX21tYXNrOCkgLTEsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnR0X3JvdW5kcHNfZXB1NjQoX19XLCBfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXE1MTJfbWFzayAoKF9fdjhzZikgX19BLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dHRfcm91bmRwc19lcHU2NChfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7ICBcCisgIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxNTEyX21hc2sgKChfX3Y4c2YpIF9fQSwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgKF9fdjhkaSkgX21tNTEyX3NldHplcm9fc2k1MTIoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnRlcHU2NF9wZCAoX19tNTEyaSBfX0EpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY3Z0ZXB1NjRfcGQgKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9jdnRlcHU2NF9wZCAoX19tbWFzazggX19VLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwZDUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRlcHU2NF9wZChfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza19jdnRfcm91bmRlcHU2NF9wZChfX1csIF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfY3Z0X3JvdW5kZXB1NjRfcGQoX19VLCBfX0EsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQ1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXB1NjRfcHMgKF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jdnRlcHU2NF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2N2dGVwdTY0X3BzIChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kZXB1NjRfcHMoX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICBcCisgIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczUxMl9tYXNrICgoX192OGRpKSBfX0EsICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY3Z0X3JvdW5kZXB1NjRfcHMoX19XLCBfX1UsIF9fQSwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2N2dF9yb3VuZGVwdTY0X3BzKF9fVSwgX19BLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHM1MTJfbWFzayAoKF9fdjhkaSkgX19BLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfcmFuZ2VfcGQoX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsIF9fQyxcCisgICAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JhbmdlX3BkKF9fVywgX19VLCBfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgX19DLFwKKyAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmFuZ2VfcGQoX19VLCBfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yYW5nZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBfX0MsIFwKKyAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQorCisjZGVmaW5lIF9tbTUxMl9yYW5nZV9yb3VuZF9wZChfX0EsIF9fQiwgX19DLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsIF9fQywgXAorICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JhbmdlX3JvdW5kX3BkKF9fVywgX19VLCBfX0EsIF9fQiwgX19DLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgX19DLCAgICAgIFwKKyAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmFuZ2Vfcm91bmRfcGQoX19VLCBfX0EsIF9fQiwgX19DLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgX19DLCAgIFwKKyAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX3JhbmdlX3BzKF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBfX0MsIFwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLCAoX19tbWFzazE2KSAtMSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza19yYW5nZV9wcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgIFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCAgICAgICBcCisgICAgICAgICAgICAgICBfX0MsIChfX3YxNnNmKSBfX1csIChfX21tYXNrMTYpIF9fVSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yYW5nZV9wcyhfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwoX192MTZzZikgX19CLCBcCisgICAgICAgICAgICAgIF9fQywgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCksIChfX21tYXNrMTYpIF9fVSwgICAgICBcCisgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7fSkKKworI2RlZmluZSBfbW01MTJfcmFuZ2Vfcm91bmRfcHMoX19BLCBfX0IsIF9fQywgX19SKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsICAgXAorICAgICAgICAgICAgICAgIF9fQywgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCksIChfX21tYXNrMTYpIC0xLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcmFuZ2Vfcm91bmRfcHMoX19XLCBfX1UsIF9fQSwgX19CLCBfX0MsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fQywgKF9fdjE2c2YpIF9fVywgKF9fbW1hc2sxNikgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JhbmdlX3JvdW5kX3BzKF9fVSwgX19BLCBfX0IsIF9fQywgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmFuZ2VwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCAgICAgIFwKKyAgICAgICAgICAgICAgICBfX0MsIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLCAoX19tbWFzazE2KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfcmVkdWNlX3BkKF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgIFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JlZHVjZV9wZChfX1csIF9fVSwgX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCBfX0IsICAgIFwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csKF9fbW1hc2s4KSBfX1UsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmVkdWNlX3BkKF9fVSwgX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgIFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7fSkKKworI2RlZmluZSBfbW01MTJfcmVkdWNlX3BzKF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIF9fQiwgIFwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLCAoX19tbWFzazE2KSAtMSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JlZHVjZV9wcyhfX1csIF9fVSwgX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIF9fQiwgICAgICBcCisgICAgICAgICAgICAgICAoX192MTZzZikgX19XLCAoX19tbWFzazE2KSBfX1UsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmVkdWNlX3BzKF9fVSwgX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczUxMl9tYXNrICgoX192MTZzZikgX19BLCBfX0IsICAgICAgXAorICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCksIChfX21tYXNrMTYpIF9fVSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTt9KQorCisjZGVmaW5lIF9tbTUxMl9yZWR1Y2Vfcm91bmRfcGQoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JlZHVjZV9yb3VuZF9wZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgX19CLCAgICBcCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JlZHVjZV9yb3VuZF9wZChfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX3JlZHVjZV9yb3VuZF9wcyhfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7XAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczUxMl9tYXNrICgoX192MTZzZikgX19BLCBfX0IsICBcCisgICAgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMoKSwgKF9fbW1hc2sxNikgLTEsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza19yZWR1Y2Vfcm91bmRfcHMoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIF9fQiwgICAgICBcCisgICAgICAgICAgICAgICAoX192MTZzZikgX19XLCAoX19tbWFzazE2KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmVkdWNlX3JvdW5kX3BzKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoe1wKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfcmVkdWNlcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgX19CLCAgICAgIFwKKyAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLCAoX19tbWFzazE2KSBfX1UsIF9fUik7fSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyZXJpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEyZXJpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE5MTIxCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJlcmludHJpbi5oCkBAIC0wLDAgKzEsMjg1IEBACisvKj09PS0tLS0gYXZ4NTEyZXJpbnRyaW4uaCAtIEFWWDUxMkVSIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyZXJpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyRVJJTlRSSU5fSAorI2RlZmluZSBfX0FWWDUxMkVSSU5UUklOX0gKKworLy8gZXhwMmEyMworI2RlZmluZSBfbW01MTJfZXhwMmEyM19yb3VuZF9wZChBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfZXhwMnBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19leHAyYTIzX3JvdW5kX3BkKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9leHAycGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShTKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BkKE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9leHAycGRfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZXhwMmEyM19wZChBKSBcCisgICBfbW01MTJfZXhwMmEyM19yb3VuZF9wZCgoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19leHAyYTIzX3BkKFMsIE0sIEEpIFwKKyAgIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcGQoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3BkKE0sIEEpIFwKKyAgIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BkKChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX2V4cDJhMjNfcm91bmRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcHMoUywgTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShTKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2V4cDJhMjNfcm91bmRfcHMoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfZXhwMnBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfZXhwMmEyM19wcyhBKSBcCisgICBfbW01MTJfZXhwMmEyM19yb3VuZF9wcygoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19leHAyYTIzX3BzKFMsIE0sIEEpIFwKKyAgIF9tbTUxMl9tYXNrX2V4cDJhMjNfcm91bmRfcHMoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9leHAyYTIzX3BzKE0sIEEpIFwKKyAgIF9tbTUxMl9tYXNrel9leHAyYTIzX3JvdW5kX3BzKChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKy8vIHJzcXJ0MjgKKyNkZWZpbmUgX21tNTEyX3JzcXJ0Mjhfcm91bmRfcGQoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JzcXJ0MjhwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wZChTLCBNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcnNxcnQyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikoX19tNTEyZCkoUyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcnNxcnQyOF9yb3VuZF9wZChNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcnNxcnQyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZilfbW01MTJfc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JzcXJ0MjhfcGQoQSkgXAorICBfbW01MTJfcnNxcnQyOF9yb3VuZF9wZCgoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19yc3FydDI4X3BkKFMsIE0sIEEpIFwKKyAgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wZCgoUyksIChNKSwgKEEpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JzcXJ0MjhfcGQoTSwgQSkgXAorICBfbW01MTJfbWFza3pfcnNxcnQyOF9yb3VuZF9wZCgoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9yc3FydDI4X3JvdW5kX3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JzcXJ0Mjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEsIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wcyhTLCBNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yc3FydDI4cHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKFMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3JzcXJ0Mjhfcm91bmRfcHMoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcnNxcnQyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JzcXJ0MjhfcHMoQSkgXAorICBfbW01MTJfcnNxcnQyOF9yb3VuZF9wcygoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19yc3FydDI4X3BzKFMsIE0sIEEpIFwKKyAgX21tNTEyX21hc2tfcnNxcnQyOF9yb3VuZF9wcygoUyksIChNKSwgQSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yc3FydDI4X3BzKE0sIEEpIFwKKyAgX21tNTEyX21hc2t6X3JzcXJ0Mjhfcm91bmRfcHMoKE0pLCAoQSksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fcnNxcnQyOF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yc3FydDI4c3Nfcm91bmQoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zcyhTLCBNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yc3FydDI4c3Nfcm91bmQoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcnNxcnQyOF9yb3VuZF9zcyhNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yc3FydDI4c3Nfcm91bmQoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yc3FydDI4X3NzKEEsIEIpIFwKKyAgX21tX3JzcXJ0Mjhfcm91bmRfc3MoKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza19yc3FydDI4X3NzKFMsIE0sIEEsIEIpIFwKKyAgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zcygoUyksIChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza3pfcnNxcnQyOF9zcyhNLCBBLCBCKSBcCisgIF9tbV9tYXNrel9yc3FydDI4X3JvdW5kX3NzKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fcnNxcnQyOF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcnNxcnQyOHNkX3JvdW5kKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9yb3VuZF9zZChTLCBNLCBBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcnNxcnQyOHNkX3JvdW5kKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JzcXJ0Mjhfcm91bmRfc2QoTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JzcXJ0MjhzZF9yb3VuZCgoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9tbV9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW1fcnNxcnQyOF9zZChBLCBCKSBcCisgIF9tbV9yc3FydDI4X3JvdW5kX3NkKChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2tfcnNxcnQyOF9zZChTLCBNLCBBLCBCKSBcCisgIF9tbV9tYXNrX3JzcXJ0Mjhfcm91bmRfc2QoKFMpLCAoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JzcXJ0Mjhfc2QoTSwgQSwgQikgXAorICBfbW1fbWFza19yc3FydDI4X3JvdW5kX3NkKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworLy8gcmNwMjgKKyNkZWZpbmUgX21tNTEyX3JjcDI4X3JvdW5kX3BkKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yY3AyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpX21tNTEyX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3JvdW5kX3BkKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZClfX2J1aWx0aW5faWEzMl9yY3AyOHBkX21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKFMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wZChNLCBBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpX19idWlsdGluX2lhMzJfcmNwMjhwZF9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKV9tbTUxMl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JjcDI4X3BkKEEpIFwKKyAgX21tNTEyX3JjcDI4X3JvdW5kX3BkKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3BkKFMsIE0sIEEpIFwKKyAgX21tNTEyX21hc2tfcmNwMjhfcm91bmRfcGQoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9wZChNLCBBKSBcCisgIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wZCgoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9yY3AyOF9yb3VuZF9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9yY3AyOHBzX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpX21tNTEyX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3JvdW5kX3BzKFMsIE0sIEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3JjcDI4cHNfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShTKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KShNKSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfcmNwMjhfcm91bmRfcHMoTSwgQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcmNwMjhwc19tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKV9tbTUxMl9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JjcDI4X3BzKEEpIFwKKyAgX21tNTEyX3JjcDI4X3JvdW5kX3BzKChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3JjcDI4X3BzKFMsIE0sIEEpIFwKKyAgX21tNTEyX21hc2tfcmNwMjhfcm91bmRfcHMoKFMpLCAoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9yY3AyOF9wcyhNLCBBKSBcCisgIF9tbTUxMl9tYXNrel9yY3AyOF9yb3VuZF9wcygoTSksIChBKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9yY3AyOF9yb3VuZF9zcyhBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOClfX2J1aWx0aW5faWEzMl9yY3AyOHNzX3JvdW5kKChfX3Y0c2YpKF9fbTEyOCkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9tbV9zZXR6ZXJvX3BzKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JjcDI4X3JvdW5kX3NzKFMsIE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JjcDI4c3Nfcm91bmQoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoUyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KShNKSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmNwMjhfcm91bmRfc3MoTSwgQSwgQiwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcmNwMjhzc19yb3VuZCgoX192NHNmKShfX20xMjgpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZilfbW1fc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tX3JjcDI4X3NzKEEsIEIpIFwKKyAgX21tX3JjcDI4X3JvdW5kX3NzKChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2tfcmNwMjhfc3MoUywgTSwgQSwgQikgXAorICBfbW1fbWFza19yY3AyOF9yb3VuZF9zcygoUyksIChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW1fbWFza3pfcmNwMjhfc3MoTSwgQSwgQikgXAorICBfbW1fbWFza3pfcmNwMjhfcm91bmRfc3MoKE0pLCAoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9yY3AyOF9yb3VuZF9zZChBLCBCLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcmNwMjhzZF9yb3VuZCgoX192MmRmKShfX20xMjhkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JjcDI4X3JvdW5kX3NkKFMsIE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yY3AyOHNkX3JvdW5kKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoUyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkoTSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JjcDI4X3JvdW5kX3NkKE0sIEEsIEIsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9yY3AyOHNkX3JvdW5kKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZilfbW1fc2V0emVyb19wZCgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKE0pLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbV9yY3AyOF9zZChBLCBCKSBcCisgIF9tbV9yY3AyOF9yb3VuZF9zZCgoQSksIChCKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9tYXNrX3JjcDI4X3NkKFMsIE0sIEEsIEIpIFwKKyAgX21tX21hc2tfcmNwMjhfcm91bmRfc2QoKFMpLCAoTSksIChBKSwgKEIpLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tX21hc2t6X3JjcDI4X3NkKE0sIEEsIEIpIFwKKyAgX21tX21hc2t6X3JjcDI4X3JvdW5kX3NkKChNKSwgKEEpLCAoQiksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2VuZGlmIC8vIF9fQVZYNTEyRVJJTlRSSU5fSApkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJmaW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2F2eDUxMmZpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGNkYzcxCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJmaW50cmluLmgKQEAgLTAsMCArMSwzMDc0IEBACisvKj09PS0tLS0gYXZ4NTEyZmludHJpbi5oIC0gQVZYNTEyRiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEyZmludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJGSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJGSU5UUklOX0gKKwordHlwZWRlZiBkb3VibGUgX192OGRmIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKK3R5cGVkZWYgZmxvYXQgX192MTZzZiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyBfX3Y4ZGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiBpbnQgX192MTZzaSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7CisKK3R5cGVkZWYgZmxvYXQgX19tNTEyIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg2NCkpKTsKK3R5cGVkZWYgZG91YmxlIF9fbTUxMmQgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDY0KSkpOwordHlwZWRlZiBsb25nIGxvbmcgX19tNTEyaSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oNjQpKSk7CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX21tYXNrODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19tbWFzazE2OworCisvKiBSb3VuZGluZyBtb2RlIG1hY3Jvcy4gICovCisjZGVmaW5lIF9NTV9GUk9VTkRfVE9fTkVBUkVTVF9JTlQgICAweDAwCisjZGVmaW5lIF9NTV9GUk9VTkRfVE9fTkVHX0lORiAgICAgICAweDAxCisjZGVmaW5lIF9NTV9GUk9VTkRfVE9fUE9TX0lORiAgICAgICAweDAyCisjZGVmaW5lIF9NTV9GUk9VTkRfVE9fWkVSTyAgICAgICAgICAweDAzCisjZGVmaW5lIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTiAgICAweDA0CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYXZ4NTEyZiIpKSkKKworLyogQ3JlYXRlIHZlY3RvcnMgd2l0aCByZXBlYXRlZCBlbGVtZW50cyAqLworCitzdGF0aWMgIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0emVyb19zaTUxMih2b2lkKQoreworICByZXR1cm4gKF9fbTUxMmkpKF9fdjhkaSl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bmRlZmluZWRfcGQoKQoreworICByZXR1cm4gKF9fbTUxMmQpX19idWlsdGluX2lhMzJfdW5kZWY1MTIoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VuZGVmaW5lZCgpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3VuZGVmNTEyKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bmRlZmluZWRfcHMoKQoreworICByZXR1cm4gKF9fbTUxMilfX2J1aWx0aW5faWEzMl91bmRlZjUxMigpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3VuZGVmaW5lZF9lcGkzMigpCit7CisgIHJldHVybiAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl91bmRlZjUxMigpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zZXQxX2VwaTMyKF9fbW1hc2sxNiBfX00sIGludCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGQ1MTJfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9zZXQxX2VwaTY0KF9fbW1hc2s4IF9fTSwgbG9uZyBsb25nIF9fQSkKK3sKKyNpZmRlZiBfX3g4Nl82NF9fCisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHE1MTJfZ3ByX21hc2sgKF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgIF9fTSk7CisjZWxzZQorICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RxNTEyX21lbV9tYXNrIChfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICBfX00pOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0emVyb19wcyh2b2lkKQoreworICByZXR1cm4gKF9fbTUxMil7IDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wIH07Cit9CitzdGF0aWMgIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc2V0emVyb19wZCh2b2lkKQoreworICByZXR1cm4gKF9fbTUxMmQpeyAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDFfcHMoZmxvYXQgX193KQoreworICByZXR1cm4gKF9fbTUxMil7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LAorICAgICAgICAgICAgICAgICAgIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193ICB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zZXQxX3BkKGRvdWJsZSBfX3cpCit7CisgIHJldHVybiAoX19tNTEyZCl7IF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDFfZXBpMzIoaW50IF9fcykKK3sKKyAgcmV0dXJuIChfX201MTJpKShfX3YxNnNpKXsgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zLCBfX3MsIF9fcywgX19zLCBfX3MsIF9fcywgX19zIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3NldDFfZXBpNjQobG9uZyBsb25nIF9fZCkKK3sKKyAgcmV0dXJuIChfX201MTJpKShfX3Y4ZGkpeyBfX2QsIF9fZCwgX19kLCBfX2QsIF9fZCwgX19kLCBfX2QsIF9fZCB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYnJvYWRjYXN0c3NfcHMoX19tMTI4IF9fWCkKK3sKKyAgZmxvYXQgX19mID0gX19YWzBdOworICByZXR1cm4gKF9fdjE2c2YpeyBfX2YsIF9fZiwgX19mLCBfX2YsCisgICAgICAgICAgICAgICAgICAgIF9fZiwgX19mLCBfX2YsIF9fZiwKKyAgICAgICAgICAgICAgICAgICAgX19mLCBfX2YsIF9fZiwgX19mLAorICAgICAgICAgICAgICAgICAgICBfX2YsIF9fZiwgX19mLCBfX2YgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9icm9hZGNhc3RzZF9wZChfX20xMjhkIF9fWCkKK3sKKyAgZG91YmxlIF9fZCA9IF9fWFswXTsKKyAgcmV0dXJuIChfX3Y4ZGYpeyBfX2QsIF9fZCwgX19kLCBfX2QsCisgICAgICAgICAgICAgICAgICAgX19kLCBfX2QsIF9fZCwgX19kIH07Cit9CisKKy8qIENhc3QgYmV0d2VlbiB2ZWN0b3IgdHlwZXMgKi8KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY2FzdHBkMjU2X3BkNTEyKF9fbTI1NmQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cHMyNTZfcHM1MTIoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Nhc3RwZDUxMl9wZDEyOChfX201MTJkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jYXN0cHM1MTJfcHMxMjgoX19tNTEyIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAxLCAyLCAzKTsKK30KKworLyogQml0d2lzZSBvcGVyYXRvcnMgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kX2VwaTMyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZF9lcGkzMihfX201MTJpIF9fc3JjLCBfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFuZGQ1MTJfbWFzaygoX192MTZzaSkgX19hLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19iLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19zcmMsCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fayk7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2FuZF9lcGkzMihfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFuZGQ1MTJfbWFzaygoX192MTZzaSkgX19hLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19iLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fayk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kX2VwaTY0KF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZF9lcGk2NChfX201MTJpIF9fc3JjLCBfX21tYXNrOCBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kcTUxMl9tYXNrICgoX192OGRpKSBfX2EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fYiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19zcmMsCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19rKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kX2VwaTY0KF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRxNTEyX21hc2sgKChfX3Y4ZGkpIF9fYSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19iLAorICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX2spOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZG5vdF9lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRuZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FuZG5vdF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kbmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hbmRub3RfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kbmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FuZG5vdF9lcGk2NCAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRucTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYW5kbm90X2VwaTY0IChfX201MTJpIF9fVywgX19tbWFzazggX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFuZG5xNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1csIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYW5kbm90X2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYW5kbnE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICBfX1UpOworfQorc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9vcl9lcGkzMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19vcl9lcGkzMihfX201MTJpIF9fc3JjLCBfX21tYXNrMTYgX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG9yZDUxMl9tYXNrKChfX3YxNnNpKSBfX2EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX2IsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX3NyYywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19rKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfb3JfZXBpMzIoX19tbWFzazE2IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BvcmQ1MTJfbWFzaygoX192MTZzaSkgX19hLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19iLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fayk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfb3JfZXBpNjQoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gX19hIHwgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfb3JfZXBpNjQoX19tNTEyaSBfX3NyYywgX19tbWFzazggX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG9ycTUxMl9tYXNrICgoX192OGRpKSBfX2EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fYiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19zcmMsCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19rKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfb3JfZXBpNjQoX19tbWFzazggX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG9ycTUxMl9tYXNrICgoX192OGRpKSBfX2EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fYiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19rKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl94b3JfZXBpMzIoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfeG9yX2VwaTMyKF9fbTUxMmkgX19zcmMsIF9fbW1hc2sxNiBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9weG9yZDUxMl9tYXNrKChfX3YxNnNpKSBfX2EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX2IsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX3NyYywKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19rKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfeG9yX2VwaTMyKF9fbW1hc2sxNiBfX2ssIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9weG9yZDUxMl9tYXNrKChfX3YxNnNpKSBfX2EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX2IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19rKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl94b3JfZXBpNjQoX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfeG9yX2VwaTY0KF9fbTUxMmkgX19zcmMsIF9fbW1hc2s4IF9faywgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3B4b3JxNTEyX21hc2sgKChfX3Y4ZGkpIF9fYSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkgX19iLAorICAgICAgICAgICAgICAoX192OGRpKSBfX3NyYywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX2spOworfQorc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel94b3JfZXBpNjQoX19tbWFzazggX19rLCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHhvcnE1MTJfbWFzayAoKF9fdjhkaSkgX19hLAorICAgICAgICAgICAgICAoX192OGRpKSBfX2IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fayk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYW5kX3NpNTEyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9vcl9zaTUxMihfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpCit7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfeG9yX3NpNTEyKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikKK3sKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKy8qIEFyaXRobWV0aWMgKi8KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWRkX3BkKF9fbTUxMmQgX19hLCBfX201MTJkIF9fYikKK3sKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRfcHMoX19tNTEyIF9fYSwgX19tNTEyIF9fYikKK3sKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsX3BkKF9fbTUxMmQgX19hLCBfX201MTJkIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxfcHMoX19tNTEyIF9fYSwgX19tNTEyIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3ViX3BkKF9fbTUxMmQgX19hLCBfX201MTJkIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJfcHMoX19tNTEyIF9fYSwgX19tNTEyIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hZGRfZXBpNjQgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjhkaSkgX19BICsgKF9fdjhkaSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9lcGk2NCAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3ViX2VwaTY0IChfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgKChfX3Y4ZGkpIF9fQSAtIChfX3Y4ZGkpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19zdWJfZXBpNjQgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VicTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wc3VicTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2FkZF9lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpICgoX192MTZzaSkgX19BICsgKF9fdjE2c2kpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRfZXBpMzIgKF9fbTUxMmkgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFkZGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfZXBpMzIgKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wYWRkZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdWJfZXBpMzIgKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSAoKF9fdjE2c2kpIF9fQSAtIChfX3YxNnNpKSBfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3ViX2VwaTMyIChfX201MTJpIF9fVywgX19tbWFzazE2IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX2VwaTMyIChfX21tYXNrMTYgX19VLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcHN1YmQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbWF4cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX21heHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWF4X3NzKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tYXhzc19yb3VuZCAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX21heF9yb3VuZF9zcyhfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19tYXhfcm91bmRfc3MoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tYXhzc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9tYXhfcm91bmRfc3MoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VLF9fUik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfc2QoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZCAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21heHNkX3JvdW5kICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9tYXhfcm91bmRfc2QoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX21heF9yb3VuZF9zZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9tYXhzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192MmRmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9tYXhfcm91bmRfc2QoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21heHNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaQorX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWF4X2VwaTMyKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21heF9lcHUzMihfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1heHVkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXBpNjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzcTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXhfZXB1NjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTUxMl9tYXNrICgoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX21pbnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9taW5wczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWluc3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fc3MoX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9taW5fcm91bmRfc3MoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfbWluX3JvdW5kX3NzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWluc3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfbWluX3JvdW5kX3NzKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9taW5zZF9yb3VuZCAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW1fbWluX3JvdW5kX3NkKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19taW5fcm91bmRfc2QoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWluc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfbWluX3JvdW5kX3NkKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9taW5zZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkKK19fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21pbl9lcGkzMihfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG1pbnNkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9taW5fZXB1MzIoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51ZDUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwaTY0KF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWluc3E1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWluX2VwdTY0KF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbWludXE1MTJfbWFzayAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbXVsX2VwaTMyKF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjhkaSkKKyAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX211bF9lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTUxMl9tYXNrICgoX192MTZzaSkgX19YLAorICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAoX192OGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bF9lcGkzMiAoX19tbWFzazggX19NLCBfX201MTJpIF9fWCwgX19tNTEyaSBfX1kpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGRxNTEyX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxfZXB1MzIoX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxfZXB1MzIgKF9fbTUxMmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTUxMmkgX19YLCBfX201MTJpIF9fWSkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsdWRxNTEyX21hc2sgKChfX3YxNnNpKSBfX1gsCisgICAgICAgICAgICAgICAoX192MTZzaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjhkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxfZXB1MzIgKF9fbW1hc2s4IF9fTSwgX19tNTEyaSBfX1gsIF9fbTUxMmkgX19ZKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHE1MTJfbWFzayAoKF9fdjE2c2kpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1ksCisgICAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tdWxsb19lcGkzMiAoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpICgoX192MTZzaSkgX19BICogKF9fdjE2c2kpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X211bGxvX2VwaTMyIChfX21tYXNrMTYgX19NLCBfX201MTJpIF9fQSwgX19tNTEyaSBfX0IpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcG11bGxkNTEyX21hc2sgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxsb19lcGkzMiAoX19tNTEyaSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9wbXVsbGQ1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfc3FydF9wZChfX201MTJkIF9fYSkKK3sKKyAgcmV0dXJuIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3NxcnRwZDUxMl9tYXNrKChfX3Y4ZGYpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zcXJ0X3BzKF9fbTUxMiBfX2EpCit7CisgIHJldHVybiAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX3NxcnRwczUxMl9tYXNrKChfX3YxNnNmKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfcnNxcnQxNF9wZChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yc3FydDE0cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7fQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3JzcXJ0MTRfcHMoX19tNTEyIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3JzcXJ0MTRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yc3FydDE0X3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydDE0c3MgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcnNxcnQxNF9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcnNxcnQxNHNkICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9yY3AxNF9wZChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3JjcDE0X3BzKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9yY3AxNHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorc3RhdGljICBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yY3AxNF9zcyhfX20xMjggX19BLCBfX20xMjggX19CKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmNwMTRzcyAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwMTRfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JjcDE0c2QgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Zsb29yX3BzKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfRkxPT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0EsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbG9vcl9wZChfX201MTJkIF9fQSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfRkxPT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0EsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jZWlsX3BzKF9fbTUxMiBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBzX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ0VJTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQSwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NlaWxfcGQoX19tNTEyZCBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NFSUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0EsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfYWJzX2VwaTY0KF9fbTUxMmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNxNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRpKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9hYnNfZXBpMzIoX19tNTEyaSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfcGFic2Q1MTJfbWFzayAoKF9fdjE2c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZzaSkKKyAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZF9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkc3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfc3MoX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9hZGRfcm91bmRfc3MoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfYWRkX3JvdW5kX3NzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkc3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9fVywgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfYWRkX3JvdW5kX3NzKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkX3NkKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYWRkc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkX3NkKF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9hZGRzZF9yb3VuZCAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKyNkZWZpbmUgX21tX2FkZF9yb3VuZF9zZChfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfYWRkX3JvdW5kX3NkKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfX1csIChfX21tYXNrOCkgX19VLF9fUik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X2FkZF9yb3VuZF9zZChfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYWRkc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLF9fUik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19hZGRfcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9hZGRfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2FkZF9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfYWRkX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2FkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfYWRkX3JvdW5kX3BkKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfYWRkX3JvdW5kX3BkKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkNTEyX21hc2soKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192OGRmKSBfX1csIChfX21tYXNrOCkgX19VLCBfX1IpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrel9hZGRfcm91bmRfcGQoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tNTEyX2FkZF9yb3VuZF9wcyhfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcygpLCAoX19tbWFzazE2KSAtMSwgX19SKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19hZGRfcm91bmRfcHMoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywgKF9fbW1hc2sxNilfX1UsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2FkZF9yb3VuZF9wcyhfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzKCksIChfX21tYXNrMTYpX19VLCBfX1IpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJfc3MoX19tMTI4IF9fVywgX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3N1YnNzX3JvdW5kICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX3NzKF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zdWJzc19yb3VuZCAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKyNkZWZpbmUgX21tX3N1Yl9yb3VuZF9zcyhfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3Vic3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19zdWJfcm91bmRfc3MoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9zdWJzc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zdWJfcm91bmRfc3MoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3Vic3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VLF9fUik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJfc2QoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zdWJzZF9yb3VuZCAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3N1YnNkX3JvdW5kICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9zdWJfcm91bmRfc2QoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zdWJzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3N1Yl9yb3VuZF9zZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zdWJzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192MmRmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9zdWJfcm91bmRfc2QoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3N1YnNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3ViX3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3N1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N1Yl9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9zdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfc3ViX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3N1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX3N1Yl9yb3VuZF9wZChfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3N1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLFwKKyAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX3N1Yl9yb3VuZF9wZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgXAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3N1Yl9yb3VuZF9wZChfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3N1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBcCisgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfc3ViX3JvdW5kX3BzKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9zdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBcCisgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMgKCksIChfX21tYXNrMTYpIC0xLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfc3ViX3JvdW5kX3BzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3N1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsIFwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX1csIChfX21tYXNrMTYpIF9fVSwgX19SKTsgfSk7CisKKyNkZWZpbmUgX21tNTEyX21hc2t6X3N1Yl9yb3VuZF9wcyhfX1UsIF9fQSwgX19CLCBfX1IpICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAorICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLCAoX19tbWFzazE2KSBfX1UsIF9fUik7fSk7CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bF9zcyhfX20xMjggX19XLCBfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVsc3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxfc3MoX19tbWFzazggX19VLF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHNzX3JvdW5kICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorI2RlZmluZSBfbW1fbXVsX3JvdW5kX3NzKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tdWxzc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX211bF9yb3VuZF9zcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHNzX3JvdW5kICgoX192NHNmKSBfX0EsIChfX3Y0c2YpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3Y0c2YpICBfX1csIChfX21tYXNrOCkgX19VLF9fUik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X211bF9yb3VuZF9zcyhfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9tdWxzc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UsX19SKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bF9zZChfX20xMjhkIF9fVywgX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHNkX3JvdW5kICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bF9zZChfX21tYXNrOCBfX1UsX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbXVsc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX211bF9yb3VuZF9zZChfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfbXVsX3JvdW5kX3NkKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfX1csIChfX21tYXNrOCkgX19VLF9fUik7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X211bF9yb3VuZF9zZChfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbXVsc2Rfcm91bmQgKChfX3YyZGYpIF9fQSwgKF9fdjJkZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjJkZikgIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VLF9fUik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19tdWxfcGQoX19tNTEyZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbXVscGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IpIHsKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9tdWxwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfbXVsX3BzKF9fbTUxMiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX211bHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9tdWxfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQikgeworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbXVscHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbXVsX3JvdW5kX3BkKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbXVscGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsXAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9tbTUxMl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfbXVsX3JvdW5kX3BkKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX211bHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBcCisgICAgICAgICAgICAgKF9fdjhkZikgX19XLCAoX19tbWFzazgpIF9fVSwgX19SKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza3pfbXVsX3JvdW5kX3BkKF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbXVscGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLCAoX192OGRmKSBfX0IsIFwKKyAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSwgX19SKTt9KQorCisjZGVmaW5lIF9tbTUxMl9tdWxfcm91bmRfcHMoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX211bHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsIFwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfbW01MTJfc2V0emVyb19wcyAoKSwgKF9fbW1hc2sxNikgLTEsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfbWFza19tdWxfcm91bmRfcHMoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfbXVscHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywgKF9fbW1hc2sxNikgX19VLCBfX1IpOyB9KTsKKworI2RlZmluZSBfbW01MTJfbWFza3pfbXVsX3JvdW5kX3BzKF9fVSwgX19BLCBfX0IsIF9fUikgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9tdWxwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBcCisgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMgKCksIChfX21tYXNrMTYpIF9fVSwgX19SKTt9KTsKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZGl2X3NzKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9kaXZzc19yb3VuZCAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Rpdl9zcyhfX21tYXNrOCBfX1UsX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tX2Rpdl9yb3VuZF9zcyhfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSAtMSwgX19SKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19kaXZfcm91bmRfc3MoX19XLCBfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9kaXZzc19yb3VuZCAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9kaXZfcm91bmRfc3MoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2c3Nfcm91bmQgKChfX3Y0c2YpIF9fQSwgKF9fdjRzZikgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VLF9fUik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19kaXZfc2QoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSxfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZCAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9kaXZfc2QoX19tbWFzazggX19VLF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2RpdnNkX3JvdW5kICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbV9kaXZfcm91bmRfc2QoX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2Rpdl9yb3VuZF9zZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kaXZzZF9yb3VuZCAoKF9fdjJkZikgX19BLCAoX192MmRmKSBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192MmRmKSAgX19XLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrel9kaXZfcm91bmRfc2QoX19VLCBfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2RpdnNkX3JvdW5kICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YyZGYpICBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSxfX1IpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZGl2X3BkKF9fbTUxMmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQikgeworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZGl2X3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CKSB7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfZGl2cGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2Rpdl9wcyhfX201MTIgX19XLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CKSB7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9kaXZwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZGl2X3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IpIHsKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2RpdnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2Rpdl9yb3VuZF9wZChfX0EsIF9fQiwgX19SKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLFwKKyAgICAgICAgICAgICAoX192OGRmKSBfbW01MTJfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xLCBfX1IpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2Rpdl9yb3VuZF9wZChfX1csIF9fVSwgX19BLCBfX0IsIF9fUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9kaXZwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsIChfX3Y4ZGYpIF9fQiwgXAorICAgICAgICAgICAgIChfX3Y4ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UsIF9fUik7IH0pCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2Rpdl9yb3VuZF9wZChfX1UsIF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwgKF9fdjhkZikgX19CLCBcCisgICAgICAgICAgICAgKF9fdjhkZikgX21tNTEyX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UsIF9fUik7fSkKKworI2RlZmluZSBfbW01MTJfZGl2X3JvdW5kX3BzKF9fQSwgX19CLCBfX1IpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9kaXZwczUxMl9tYXNrICgoX192MTZzZikgX19BLCAoX192MTZzZikgX19CLCBcCisgICAgICAgICAgICAoX192MTZzZikgX21tNTEyX3NldHplcm9fcHMgKCksIChfX21tYXNrMTYpIC0xLCBfX1IpO30pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZGl2X3JvdW5kX3BzKF9fVywgX19VLCBfX0EsIF9fQiwgX19SKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2RpdnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsIChfX3YxNnNmKSBfX0IsIFwKKyAgICAgICAgICAgIChfX3YxNnNmKSBfX1csIChfX21tYXNrMTYpIF9fVSwgX19SKTsgfSk7CisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2Rpdl9yb3VuZF9wcyhfX1UsIF9fQSwgX19CLCBfX1IpICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfZGl2cHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwgKF9fdjE2c2YpIF9fQiwgXAorICAgICAgICAgICAgKF9fdjE2c2YpIF9tbTUxMl9zZXR6ZXJvX3BzICgpLCAoX19tbWFzazE2KSBfX1UsIF9fUik7fSk7CisKKyNkZWZpbmUgX21tNTEyX3JvdW5kc2NhbGVfcHMoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc19tYXNrKChfX3YxNnNmKShBKSwgKEIpLCAoX192MTZzZikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX3JvdW5kc2NhbGVfcGQoQSwgQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKV9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfbWFzaygoX192OGRmKShBKSwgKEIpLCAoX192OGRmKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7IH0pCisKKyNkZWZpbmUgX21tNTEyX2ZtYWRkX3JvdW5kX3BkKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZtYWRkX3JvdW5kX3BkKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm1hZGRfcm91bmRfcGQoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrMyAoKF9fdjhkZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbWFkZF9yb3VuZF9wZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6ICgoX192OGRmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX2Ztc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIC0oX192OGRmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbXN1Yl9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAtKF9fdjhkZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbXN1Yl9yb3VuZF9wZChVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6ICgoX192OGRmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIC0oX192OGRmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbm1hZGRfcm91bmRfcGQoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgtKF9fdjhkZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbm1hZGRfcm91bmRfcGQoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrMyAoLShfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm5tYWRkX3JvdW5kX3BkKFUsIEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ogKC0oX192OGRmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX2ZubXN1Yl9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKC0oX192OGRmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgLShfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbm1zdWJfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoLShfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgLShfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1hZGRfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbWFkZF9wZChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbWFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFzazMgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZtYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2Ztc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNreiAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZubWFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2sgKC0oX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm5tYWRkX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrMyAoLShfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZubWFkZF9wZChfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQ1MTJfbWFza3ogKC0oX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbm1zdWJfcGQoX19tNTEyZCBfX0EsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDUxMl9tYXNrICgtKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbm1zdWJfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkNTEyX21hc2t6ICgtKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9mbWFkZF9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLCAoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm1hZGRfcm91bmRfcHMoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm1hZGRfcm91bmRfcHMoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2szICgoX192MTZzZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1hZGRfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgoX192MTZzZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfZm1zdWJfcm91bmRfcHMoQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgLShfX3YxNnNmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbXN1Yl9yb3VuZF9wcyhBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAtKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1zdWJfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgoX192MTZzZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAtKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX2ZubWFkZF9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoLShfX3YxNnNmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbm1hZGRfcm91bmRfcHMoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2szICgtKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2t6X2ZubWFkZF9yb3VuZF9wcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ogKC0oX192MTZzZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfZm5tc3ViX3JvdW5kX3BzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgtKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAtKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbm1zdWJfcm91bmRfcHMoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgtKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgLShfX3YxNnNmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfZm1hZGRfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1hZGRfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbWFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzazMgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1hZGRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2Ztc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbXN1Yl9wcyhfX201MTIgX19BLCBfX21tYXNrMTYgX19VLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbXN1Yl9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ogKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZubWFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoLShfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZubWFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzazMgKC0oX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZubWFkZF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFza3ogKC0oX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZubXN1Yl9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkcHM1MTJfbWFzayAoLShfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9mbm1zdWJfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzNTEyX21hc2t6ICgtKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9mbWFkZHN1Yl9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbWFkZHN1Yl9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2szX2ZtYWRkc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzazMgKChfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1hZGRzdWJfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNreiAoKF9fdjhkZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbXN1YmFkZF9yb3VuZF9wZChBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAtKF9fdjhkZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLCAoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm1zdWJhZGRfcm91bmRfcGQoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgLShfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza3pfZm1zdWJhZGRfcm91bmRfcGQoVSwgQSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNreiAoKF9fdjhkZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAtKF9fdjhkZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbWFkZHN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2ZtYWRkc3ViX3BkKF9fbTUxMmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTUxMmQgX19CLCBfX201MTJkIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZtYWRkc3ViX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDUxMl9tYXNrMyAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1hZGRzdWJfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2t6ICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbXN1YmFkZF9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbXN1YmFkZF9wZChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQ1MTJfbWFzayAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1zdWJhZGRfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkNTEyX21hc2t6ICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2ZtYWRkc3ViX3JvdW5kX3BzKEEsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrICgoX192MTZzZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEsIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFza19mbWFkZHN1Yl9yb3VuZF9wcyhBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbWFkZHN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzazMgKChfX3YxNnNmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbWFkZHN1Yl9yb3VuZF9wcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFza3ogKChfX3YxNnNmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9mbXN1YmFkZF9yb3VuZF9wcyhBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAtKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrX2Ztc3ViYWRkX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrICgoX192MTZzZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIC0oX192MTZzZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKKworCisjZGVmaW5lIF9tbTUxMl9tYXNrel9mbXN1YmFkZF9yb3VuZF9wcyhVLCBBLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFza3ogKChfX3YxNnNmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIC0oX192MTZzZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2ZtYWRkc3ViX3BzKF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2ZtYWRkc3ViX3BzKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm1hZGRzdWJfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQywgX19tbWFzazE2IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2szICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2ZtYWRkc3ViX3BzKF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczUxMl9tYXNreiAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9mbXN1YmFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm1zdWJhZGRfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfZm1zdWJhZGRfcHMoX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzNTEyX21hc2t6ICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2szX2Ztc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtc3VicGQ1MTJfbWFzazMgKChfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbXN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZtc3VicGQ1MTJfbWFzazMgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrM19mbXN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtc3VicHM1MTJfbWFzazMgKChfX3YxNnNmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSAoQiksIChfX3YxNnNmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFzazNfZm1zdWJfcHMoX19tNTEyIF9fQSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQywgX19tbWFzazE2IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzNTEyX21hc2szICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFzazNfZm1zdWJhZGRfcm91bmRfcGQoQSwgQiwgQywgVSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZDUxMl9tYXNrMyAoKF9fdjhkZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIChVKSwgKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2Ztc3ViYWRkX3BkKF9fbTUxMmQgX19BLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwZDUxMl9tYXNrMyAoKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2szX2Ztc3ViYWRkX3JvdW5kX3BzKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwczUxMl9tYXNrMyAoKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrM19mbXN1YmFkZF9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHM1MTJfbWFzazMgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2ZubWFkZF9yb3VuZF9wZChBLCBVLCBCLCBDLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSAoQiksIChfX3Y4ZGYpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgKFUpLCAoUikpOyB9KQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbm1hZGRfcGQoX19tNTEyZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZDUxMl9tYXNrICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworI2RlZmluZSBfbW01MTJfbWFza19mbm1hZGRfcm91bmRfcHMoQSwgVSwgQiwgQywgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwczUxMl9tYXNrICgoX192MTZzZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgKEIpLCAoX192MTZzZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAoVSksIChSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfZm5tYWRkX3BzKF9fbTUxMiBfX0EsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0IsIF9fbTUxMiBfX0MpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHM1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm5tc3ViX3JvdW5kX3BkKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpIChCKSwgKF9fdjhkZikgKEMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCisKKworI2RlZmluZSBfbW01MTJfbWFzazNfZm5tc3ViX3JvdW5kX3BkKEEsIEIsIEMsIFUsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkNTEyX21hc2szICgoX192OGRmKSAoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgKEIpLCAoX192OGRmKSAoQyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAoVSksIChSKSk7IH0pCisKKworc3RhdGljIF9faW5saW5lX18gX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2ZubXN1Yl9wZChfX201MTJkIF9fQSwgX19tbWFzazggX19VLCBfX201MTJkIF9fQiwgX19tNTEyZCBfX0MpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZubXN1Yl9wZChfX201MTJkIF9fQSwgX19tNTEyZCBfX0IsIF9fbTUxMmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkNTEyX21hc2szICgoX192OGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX21hc2tfZm5tc3ViX3JvdW5kX3BzKEEsIFUsIEIsIEMsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicHM1MTJfbWFzayAoKF9fdjE2c2YpIChBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgKFUpLCAoUikpOyB9KQorCisKKyNkZWZpbmUgX21tNTEyX21hc2szX2ZubXN1Yl9yb3VuZF9wcyhBLCBCLCBDLCBVLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZubXN1YnBzNTEyX21hc2szICgoX192MTZzZikgKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIChCKSwgKF9fdjE2c2YpIChDKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIChVKSwgKFIpKTsgfSkKKworCitzdGF0aWMgX19pbmxpbmVfXyBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19mbm1zdWJfcHMoX19tNTEyIF9fQSwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQiwgX19tNTEyIF9fQykKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczUxMl9tYXNrICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNTEyIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2szX2ZubXN1Yl9wcyhfX201MTIgX19BLCBfX201MTIgX19CLCBfX201MTIgX19DLCBfX21tYXNrMTYgX19VKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfdmZubXN1YnBzNTEyX21hc2szICgoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKworCisvKiBWZWN0b3IgcGVybXV0YXRpb25zICovCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4MnZhcl9lcGkzMihfX201MTJpIF9fQSwgX19tNTEyaSBfX0ksIF9fbTUxMmkgX19CKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkNTEyX21hc2sgKChfX3YxNnNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wZXJtdXRleDJ2YXJfZXBpNjQoX19tNTEyaSBfX0EsIF9fbTUxMmkgX19JLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTUxMl9tYXNrICgoX192OGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3Blcm11dGV4MnZhcl9wZChfX201MTJkIF9fQSwgX19tNTEyaSBfX0ksIF9fbTUxMmQgX19CKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDUxMl9tYXNrICgoX192OGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9wZXJtdXRleDJ2YXJfcHMoX19tNTEyIF9fQSwgX19tNTEyaSBfX0ksIF9fbTUxMiBfX0IpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHM1MTJfbWFzayAoKF9fdjE2c2kpIF9fSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworI2RlZmluZSBfbW01MTJfYWxpZ25yX2VwaTY0KEEsIEIsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9hbGlnbnE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSSksIChfX3Y4ZGkpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9hbGlnbnJfZXBpMzIoQSwgQiwgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX201MTJpKV9fYnVpbHRpbl9pYTMyX2FsaWduZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEkpLCAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOyB9KQorCisvKiBWZWN0b3IgRXh0cmFjdCAqLworCisjZGVmaW5lIF9tbTUxMl9leHRyYWN0ZjY0eDRfcGQoQSwgSSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKF9fbTI1NmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19idWlsdGluX2lhMzJfZXh0cmFjdGY2NHg0X21hc2soKF9fdjhkZikoX19tNTEyZCkoQSksICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2V4dHJhY3RmMzJ4NF9wcyhBLCBJKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoX19tMTI4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2J1aWx0aW5faWEzMl9leHRyYWN0ZjMyeDRfbWFzaygoX192MTZzZikoX19tNTEyKShBKSwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsgfSkKKworLyogVmVjdG9yIEJsZW5kICovCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfYmxlbmRfcGQoX19tbWFzazggX19VLCBfX201MTJkIF9fQSwgX19tNTEyZCBfX1cpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfYmxlbmRtcGRfNTEyX21hc2sgKChfX3Y4ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhkZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19ibGVuZF9wcyhfX21tYXNrMTYgX19VLCBfX201MTIgX19BLCBfX201MTIgX19XKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfYmxlbmRtcHNfNTEyX21hc2sgKChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2JsZW5kX2VwaTY0KF9fbW1hc2s4IF9fVSwgX19tNTEyaSBfX0EsIF9fbTUxMmkgX19XKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbXFfNTEyX21hc2sgKChfX3Y4ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2JsZW5kX2VwaTMyKF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BLCBfX201MTJpIF9fVykKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9ibGVuZG1kXzUxMl9tYXNrICgoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworLyogQ29tcGFyZSAqLworCisjZGVmaW5lIF9tbTUxMl9jbXBfcm91bmRfcHNfbWFzayhBLCBCLCBQLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBwczUxMl9tYXNrKChfX3YxNnNmKShfX201MTIpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikoX19tNTEyKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFApLCAoX19tbWFzazE2KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9yb3VuZF9wc19tYXNrKFUsIEEsIEIsIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHBzNTEyX21hc2soKF9fdjE2c2YpKF9fbTUxMikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKShfX201MTIpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUCksIChfX21tYXNrMTYpKFUpLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jbXBfcHNfbWFzayhBLCBCLCBQKSBcCisgIF9tbTUxMl9jbXBfcm91bmRfcHNfbWFzaygoQSksIChCKSwgKFApLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pCisKKyNkZWZpbmUgX21tNTEyX21hc2tfY21wX3BzX21hc2soVSwgQSwgQiwgUCkgXAorICBfbW01MTJfbWFza19jbXBfcm91bmRfcHNfbWFzaygoVSksIChBKSwgKEIpLCAoUCksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfY21wX3JvdW5kX3BkX21hc2soQSwgQiwgUCwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwZDUxMl9tYXNrKChfX3Y4ZGYpKF9fbTUxMmQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGYpKF9fbTUxMmQpKEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQKSwgKF9fbW1hc2s4KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9tYXNrX2NtcF9yb3VuZF9wZF9tYXNrKFUsIEEsIEIsIFAsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQ1MTJfbWFzaygoX192OGRmKShfX201MTJkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKShfX201MTJkKShCKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUCksIChfX21tYXNrOCkoVSksIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2NtcF9wZF9tYXNrKEEsIEIsIFApIFwKKyAgX21tNTEyX2NtcF9yb3VuZF9wZF9tYXNrKChBKSwgKEIpLCAoUCksIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfcGRfbWFzayhVLCBBLCBCLCBQKSBcCisgIF9tbTUxMl9tYXNrX2NtcF9yb3VuZF9wZF9tYXNrKChVKSwgKEEpLCAoQiksIChQKSwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisvKiBDb252ZXJzaW9uICovCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dHRwc19lcHUzMihfX201MTIgX19BKQoreworICByZXR1cm4gKF9fbTUxMmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1ZHE1MTJfbWFzayAoKF9fdjE2c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fc2k1MTIgKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZGVwaTMyX3BzKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyKV9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzNTEyX21hc2soKF9fdjE2c2kpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRlcHUzMl9wcyhBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMilfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHM1MTJfbWFzaygoX192MTZzaSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZilfbW01MTJfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKFIpKTsgfSkKKworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0ZXBpMzJfcGQoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQ1MTJfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4ZGYpCisgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2N2dGVwdTMyX3BkKF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTUxMmQpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwZDUxMl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGRfcHMoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfY3Z0cGQycHM1MTJfbWFzaygoX192OGRmKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2N2dHBzX3BoKEEsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGg1MTJfbWFzaygoX192MTZzZikoQSksIChJKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsgfSkKKworc3RhdGljICBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY3Z0cGhfcHMoX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHM1MTJfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSwKKyAgICAgICAgICAgICAgICBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyaSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cHNfZXBpMzIoX19tNTEyIF9fYSkKK3sKKyAgcmV0dXJuIChfX201MTJpKQorICAgIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTUxMl9tYXNrKChfX3YxNnNmKSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xLCBfTU1fRlJPVU5EX0NVUl9ESVJFQ1RJT04pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jdnR0cGRfZXBpMzIoX19tNTEyZCBfX2EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHE1MTJfbWFzaygoX192OGRmKSBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTik7Cit9CisKKyNkZWZpbmUgX21tNTEyX2N2dHRfcm91bmRwZF9lcGkzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxNTEyX21hc2soKF9fdjhkZikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfY3Z0dF9yb3VuZHBzX2VwaTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnR0cHMyZHE1MTJfbWFzaygoX192MTZzZikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwc19lcGkzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTUxMmkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHE1MTJfbWFzaygoX192MTZzZikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSlfbW01MTJfc2V0emVyb19zaTUxMigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSwgKFIpKTsgfSkKKworI2RlZmluZSBfbW01MTJfY3Z0X3JvdW5kcGRfZXBpMzIoQSwgUikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxNTEyX21hc2soKF9fdjhkZikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKV9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEsIChSKSk7IH0pCisKKyNkZWZpbmUgX21tNTEyX2N2dF9yb3VuZHBzX2VwdTMyKEEsIFIpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNTEyaSlfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHE1MTJfbWFzaygoX192MTZzZikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpX21tNTEyX3NldHplcm9fc2k1MTIoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xLCAoUikpOyB9KQorCisjZGVmaW5lIF9tbTUxMl9jdnRfcm91bmRwZF9lcHUzMihBLCBSKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfY3Z0cGQydWRxNTEyX21hc2soKF9fdjhkZikoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSlfbW0yNTZfc2V0emVyb19zaTI1NigpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEsIChSKSk7IH0pCisKKy8qIFVucGFjayBhbmQgSW50ZXJsZWF2ZSAqLworc3RhdGljIF9faW5saW5lIF9fbTUxMmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNraGlfcGQoX19tNTEyZCBfX2EsIF9fbTUxMmQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDEsIDksIDErMiwgOSsyLCAxKzQsIDkrNCwgMSs2LCA5KzYpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl91bnBhY2tsb19wZChfX201MTJkIF9fYSwgX19tNTEyZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMCwgOCwgMCsyLCA4KzIsIDArNCwgOCs0LCAwKzYsIDgrNik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNraGlfcHMoX19tNTEyIF9fYSwgX19tNTEyIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgICAgMTgsICAgIDMsICAgIDE5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMis0LCAgMTgrNCwgIDMrNCwgIDE5KzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKzgsICAxOCs4LCAgMys4LCAgMTkrOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIrMTIsIDE4KzEyLCAzKzEyLCAxOSsxMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdW5wYWNrbG9fcHMoX19tNTEyIF9fYSwgX19tNTEyIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgMTYsICAgIDEsICAgIDE3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCs0LCAgMTYrNCwgIDErNCwgIDE3KzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKzgsICAxNis4LCAgMSs4LCAgMTcrOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDArMTIsIDE2KzEyLCAxKzEyLCAxNysxMik7Cit9CisKKy8qIEJpdCBUZXN0ICovCisKK3N0YXRpYyBfX2lubGluZSBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdF9lcGkzMl9tYXNrKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrMTYpIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bWQ1MTIgKChfX3YxNnNpKSBfX0EsCisgICAgICAgICAgICAoX192MTZzaSkgX19CLAorICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfdGVzdF9lcGk2NF9tYXNrKF9fbTUxMmkgX19BLCBfX201MTJpIF9fQikKK3sKKyAgcmV0dXJuIChfX21tYXNrOCkgX19idWlsdGluX2lhMzJfcHRlc3RtcTUxMiAoKF9fdjhkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OGRpKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCisvKiBTSU1EIGxvYWQgb3BzICovCisKK3N0YXRpYyBfX2lubGluZSBfX201MTJpIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2xvYWR1X2VwaTMyKF9fbW1hc2sxNiBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJpKSBfX2J1aWx0aW5faWEzMl9sb2FkZHF1c2k1MTJfbWFzayAoKGNvbnN0IF9fdjE2c2kgKilfX1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19zaTUxMiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZHVfZXBpNjQoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyaSkgX19idWlsdGluX2lhMzJfbG9hZGRxdWRpNTEyX21hc2sgKChjb25zdCBfX3Y4ZGkgKilfX1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3NpNTEyICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZHVfcHMoX19tbWFzazE2IF9fVSwgdm9pZCBjb25zdCAqX19QKQoreworICByZXR1cm4gKF9fbTUxMikgX19idWlsdGluX2lhMzJfbG9hZHVwczUxMl9tYXNrICgoY29uc3QgX192MTZzZiAqKV9fUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrel9sb2FkdV9wZChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkKK3sKKyAgcmV0dXJuIChfX201MTJkKSBfX2J1aWx0aW5faWEzMl9sb2FkdXBkNTEyX21hc2sgKChjb25zdCBfX3Y4ZGYgKilfX1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza3pfbG9hZF9wcyhfX21tYXNrMTYgX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyKSBfX2J1aWx0aW5faWEzMl9sb2FkYXBzNTEyX21hc2sgKChjb25zdCBfX3YxNnNmICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tNTEyX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTJkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2t6X2xvYWRfcGQoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbG9hZGFwZDUxMl9tYXNrICgoY29uc3QgX192OGRmICopX19QLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkdV9wZChkb3VibGUgY29uc3QgKl9fcCkKK3sKKyAgc3RydWN0IF9fbG9hZHVfcGQgeworICAgIF9fbTUxMmQgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcGQqKV9fcCktPl9fdjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTUxMiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkdV9wcyhmbG9hdCBjb25zdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9wcyB7CisgICAgX19tNTEyIF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BzKilfX3ApLT5fX3Y7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX201MTIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbG9hZF9wcyhkb3VibGUgY29uc3QgKl9fcCkKK3sKKyAgcmV0dXJuIChfX201MTIpIF9fYnVpbHRpbl9pYTMyX2xvYWRhcHM1MTJfbWFzayAoKGNvbnN0IF9fdjE2c2YgKilfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW01MTJfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tNTEyZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9sb2FkX3BkKGZsb2F0IGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAoX19tNTEyZCkgX19idWlsdGluX2lhMzJfbG9hZGFwZDUxMl9tYXNrICgoY29uc3QgX192OGRmICopX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbTUxMl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKKy8qIFNJTUQgc3RvcmUgb3BzICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmV1X2VwaTY0KHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX201MTJpIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXVkaTUxMl9tYXNrICgoX192OGRpICopX19QLCAoX192OGRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JldV9lcGkzMih2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMmkgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdXNpNTEyX21hc2sgKChfX3YxNnNpICopX19QLCAoX192MTZzaSkgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfc3RvcmV1X3BkKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmV1cGQ1MTJfbWFzayAoKF9fdjhkZiAqKV9fUCwgKF9fdjhkZikgX19BLCAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JldV9wZCh2b2lkICpfX1AsIF9fbTUxMmQgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwZDUxMl9tYXNrKChfX3Y4ZGYgKilfX1AsIChfX3Y4ZGYpX19BLCAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JldV9wcyh2b2lkICpfX1AsIF9fbW1hc2sxNiBfX1UsIF9fbTUxMiBfX0EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzNTEyX21hc2sgKChfX3YxNnNmICopX19QLCAoX192MTZzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9zdG9yZXVfcHModm9pZCAqX19QLCBfX201MTIgX19BKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwczUxMl9tYXNrKChfX3YxNnNmICopX19QLCAoX192MTZzZilfX0EsIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JlX3BkKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX201MTJkIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVhcGQ1MTJfbWFzayAoKF9fdjhkZiAqKV9fUCwgKF9fdjhkZikgX19BLCAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JlX3BkKHZvaWQgKl9fUCwgX19tNTEyZCBfX0EpCit7CisgICooX19tNTEyZCopX19QID0gX19BOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX3N0b3JlX3BzKHZvaWQgKl9fUCwgX19tbWFzazE2IF9fVSwgX19tNTEyIF9fQSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmVhcHM1MTJfbWFzayAoKF9fdjE2c2YgKilfX1AsIChfX3YxNnNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX3N0b3JlX3BzKHZvaWQgKl9fUCwgX19tNTEyIF9fQSkKK3sKKyAgKihfX201MTIqKV9fUCA9IF9fQTsKK30KKworLyogTWFzayBvcHMgKi8KKworc3RhdGljIF9faW5saW5lIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9rbm90KF9fbW1hc2sxNiBfX00pCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9rbm90aGkoX19NKTsKK30KKworLyogSW50ZWdlciBjb21wYXJlICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcGkzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZXFkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZXFfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGVxX2VwdTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGVxX2VwdTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBlcV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZXFfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBlcV9lcHU2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBlcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ2VfZXBpMzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGdlX2VwaTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBnZV9lcHUzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBnZV9lcHUzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGdlX2VwaTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBnZV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ2VfZXB1NjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ2VfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGd0X2VwaTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBndF9lcGkzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9wY21wZ3RkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wZ3RfZXB1MzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wZ3RfZXB1MzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3RxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBndF9lcGk2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGd0X2VwdTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGd0X2VwdTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcGkzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbGVfZXBpMzJfbWFzayhfX21tYXNrMTYgX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGxlX2VwdTMyX21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwdTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbGVfZXBpNjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGxlX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsZV9lcHU2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsZV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbHRfZXBpMzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9tYXNrX2NtcGx0X2VwaTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBsdF9lcHUzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsdF9lcHUzMl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKV9fYSwgKF9fdjE2c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcGx0X2VwaTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBsdF9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbHRfZXB1NjRfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbHRfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcGkzMl9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwaTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTUxMl9jbXBuZXFfZXB1MzJfbWFzayhfX201MTJpIF9fYSwgX19tNTEyaSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSlfX2EsIChfX3YxNnNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX21hc2tfY21wbmVxX2VwdTMyX21hc2soX19tbWFzazE2IF9fdSwgX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBkNTEyX21hc2soKF9fdjE2c2kpX19hLCAoX192MTZzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfY21wbmVxX2VwaTY0X21hc2soX19tNTEyaSBfX2EsIF9fbTUxMmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTUxMl9tYXNrKChfX3Y4ZGkpX19hLCAoX192OGRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKV9fYSwgKF9fdjhkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tNTEyX2NtcG5lcV9lcHU2NF9tYXNrKF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW01MTJfbWFza19jbXBuZXFfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTUxMmkgX19hLCBfX201MTJpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSlfX2EsIChfX3Y4ZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworI2RlZmluZSBfbW01MTJfY21wX2VwaTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZzaSkoX19tNTEyaSkoYiksIChwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwdTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGQ1MTJfbWFzaygoX192MTZzaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShiKSwgKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwaTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGRpKShfX201MTJpKShiKSwgKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfY21wX2VwdTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTUxMl9tYXNrKChfX3Y4ZGkpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGIpLCAocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXBpMzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBkNTEyX21hc2soKF9fdjE2c2kpKF9fbTUxMmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnNpKShfX201MTJpKShiKSwgKHApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXB1MzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wZDUxMl9tYXNrKChfX3YxNnNpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2c2kpKF9fbTUxMmkpKGIpLCAocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXBpNjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHE1MTJfbWFzaygoX192OGRpKShfX201MTJpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4ZGkpKF9fbTUxMmkpKGIpLCAocCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW01MTJfbWFza19jbXBfZXB1NjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxNTEyX21hc2soKF9fdjhkaSkoX19tNTEyaSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhkaSkoX19tNTEyaSkoYiksIChwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpKG0pKTsgfSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLy8gX19BVlg1MTJGSU5UUklOX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxid2ludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2bGJ3aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1NDJkNgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxid2ludHJpbi5oCkBAIC0wLDAgKzEsMjMzNiBAQAorLyo9PT0tLS0tIGF2eDUxMnZsYndpbnRyaW4uaCAtIEFWWDUxMlZMIGFuZCBBVlg1MTJCVyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEydmxid2ludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19BVlg1MTJWTEJXSU5UUklOX0gKKyNkZWZpbmUgX19BVlg1MTJWTEJXSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJ2bCxhdng1MTJidyIpKSkKKworLyogSW50ZWdlciBjb21wYXJlICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGk4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcGk4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcHU4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGVxX2VwdThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXBpOF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9wY21wZXFiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZXFfZXBpOF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9wY21wZXFiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXB1OF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBlcV9lcHU4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXBpMTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXF3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGVxX2VwaTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXF3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcHUxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcHUxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZXFfZXBpMTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGVxdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGVxX2VwaTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBlcXcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcHUxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBlcV9lcHUxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9lcGk4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBnZV9lcGk4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9lcHU4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGdlX2VwdThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXBpOF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ2VfZXBpOF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXB1OF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcHU4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ2VfZXBpMTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGdlX2VwaTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9lcHUxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBnZV9lcHUxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXBpMTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGdlX2VwaTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBnZV9lcHUxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcHUxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcGk4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBndGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBndF9lcGk4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBndGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcHU4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGd0X2VwdThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXBpOF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9wY21wZ3RiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXBpOF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9wY21wZ3RiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXB1OF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBndF9lcHU4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpMTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3R3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGd0X2VwaTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZ3R3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcHUxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBndF9lcHUxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXBpMTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfcGNtcGd0dzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGd0X2VwaTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3BjbXBndHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBndF9lcHUxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBndF9lcHUxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9lcGk4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsZV9lcGk4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9lcHU4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGxlX2VwdThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbGVfZXBpOF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbGVfZXBpOF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbGVfZXB1OF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsZV9lcHU4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfZXBpMTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGxlX2VwaTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9lcHUxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsZV9lcHUxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbGVfZXBpMTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGxlX2VwaTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsZV9lcHUxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsZV9lcHUxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9lcGk4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsdF9lcGk4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9lcHU4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGx0X2VwdThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbHRfZXBpOF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbHRfZXBpOF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbHRfZXB1OF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKV9fYSwgKF9fdjMycWkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsdF9lcHU4X21hc2soX19tbWFzazMyIF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXBpMTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGx0X2VwaTE2X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9lcHUxNl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsdF9lcHUxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbHRfZXBpMTZfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGx0X2VwaTE2X21hc2soX19tbWFzazE2IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsdF9lcHUxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsdF9lcHUxNl9tYXNrKF9fbW1hc2sxNiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfZXBpOF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazE2KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbmVxX2VwaThfbWFzayhfX21tYXNrMTYgX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wYjEyOF9tYXNrKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9lcHU4X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2sxNiktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2sxNiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcG5lcV9lcHU4X21hc2soX19tbWFzazE2IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX3VjbXBiMTI4X21hc2soKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcG5lcV9lcGk4X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMzIpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBuZXFfZXBpOF9tYXNrKF9fbW1hc2szMiBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl9jbXBiMjU2X21hc2soKF9fdjMycWkpX19hLCAoX192MzJxaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMzIgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbmVxX2VwdThfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazMyKS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazMyIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbmVxX2VwdThfbWFzayhfX21tYXNrMzIgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfdWNtcGIyNTZfbWFzaygoX192MzJxaSlfX2EsIChfX3YzMnFpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfZXBpMTZfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcG5lcV9lcGkxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wdzEyOF9tYXNrKChfX3Y4aGkpX19hLCAoX192OGhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX2VwdTE2X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcG5lcV9lcHUxNl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHcxMjhfbWFzaygoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbmVxX2VwaTE2X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBuZXFfZXBpMTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazE2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcG5lcV9lcHUxNl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKV9fYSwgKF9fdjE2aGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrMTYpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrMTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBuZXFfZXB1MTZfbWFzayhfX21tYXNrMTYgX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSlfX2EsIChfX3YxNmhpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkX2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWRkX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGRiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAoX192MzJxaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZoaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3ViX2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3ViYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1Yl9lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3ViYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjMycWkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1Yl9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3ViX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3VidzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hZGRfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkX2VwaTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZxaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGR3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX2VwaTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAoX192MTZxaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3ViX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3VidzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhoaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxsb19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bGxvX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjE2aGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsbG9fZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsbG9fZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGx3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAoX192OGhpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYmxlbmRfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19XKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbWJfMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2JsZW5kX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fVykKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9ibGVuZG1iXzI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19ibGVuZF9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX1cpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfYmxlbmRtd18xMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYmxlbmRfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fVykKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9ibGVuZG13XzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hYnNfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hYnNfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hYnNfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hYnNfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFic2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hYnNfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhYnN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hYnNfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hYnNfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWJzX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wYWNrc19lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFja3NzZHcxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wYWNrc19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3MTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wYWNrc19lcGkzMiAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wYWNrc19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3MjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGFja3NfZXBpMTYgKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGFja3NfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wYWNrc19lcGkxNiAoX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3BhY2tzX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3Nzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wYWNrdXNfZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3MTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3BhY2t1c19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXNkdzEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGFja3VzX2VwaTMyIChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFja3VzZHcyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3BhY2t1c19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXNkdzI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wYWNrdXNfZXBpMTYgKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGFja3VzX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3BhY2t1c19lcGkxNiAoX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3BhY2t1c19lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkc19lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FkZHNfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRzX2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWRkc19lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZHNfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRzX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRzX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkc3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRzX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZHNfZXB1OCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkc19lcHU4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZHVzYjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRzX2VwdTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHVzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZHNfZXB1OCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkc19lcHUxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRzX2VwdTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkc19lcHUxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHVzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZHNfZXB1MTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2F2Z19lcHU4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGF2Z2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hdmdfZXB1OCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhdmdiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2F2Z19lcHU4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGF2Z2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hdmdfZXB1OCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhdmdiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2F2Z19lcHUxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hdmdfZXB1MTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYXZnX2VwdTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYXZnX2VwdTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGF2Z3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9lcGk4IChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWF4X2VwaTggKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfZXBpMTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWF4X2VwaTE2IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfZXB1OCAoX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXB1OCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAorICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcHU4IChfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHViMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcHU4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHViMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwdTE2IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXB1MTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcHUxNiAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1dzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYXhfZXB1MTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHV3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXBpOCAoX19tbWFzazMyIF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19taW5fZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcGkxNiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwaTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnN3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXBpMTYgKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWluc3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcHU4IChfX21tYXNrMTYgX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnViMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9lcHU4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnViMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwdTggKF9fbW1hc2szMiBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludWIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX2VwdTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludWIyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fZXB1MTYgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9lcHUxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwdTE2IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnV3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcHUxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludXcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NodWZmbGVfZXBpOCAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zaHVmZmxlX2VwaTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc2h1ZmIxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2h1ZmZsZV9lcGk4IChfX20yNTZpIF9fVywgX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NodWZmbGVfZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJzX2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3Vic19lcGk4IChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1YnNfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3Vic2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zdWJzX2VwaTggKF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3Vic2IyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Vic19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1YnNfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1YnNfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1YnNfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3Vic3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3Vic19lcHU4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IxMjhfbWFzayAoKF9fdjE2cWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJzX2VwdTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3VidXNiMTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1YnNfZXB1OCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3VidXNiMjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3Vic19lcHU4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHN1YnVzYjI1Nl9tYXNrICgoX192MzJxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJzX2VwdTE2IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1YnNfZXB1MTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJzX2VwdTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3VidXN3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3Vic19lcHUxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2syX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19JIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazJfcGVybXV0ZXgydmFyX2VwaTE2IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksCisgICAgICAgICBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFyaGkyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0kgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19JLyogaWR4ICovLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTEyOGkgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19JLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkxMjhfbWFzayAoKF9fdjhoaSkgX19JLyogaWR4ICovLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4MnZhcl9lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksCisgICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkxMjhfbWFza3ogKChfX3Y4aGkpIF9fSS8qIGlkeCAqLywKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmhpMjU2X21hc2sgKChfX3YxNmhpKSBfX0kvKiBpZHggKi8sCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4MnZhcl9lcGkxNiAoX19tMjU2aSBfX0EsIF9fbW1hc2sxNiBfX1UsCisgICAgICAgIF9fbTI1NmkgX19JLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyaGkyNTZfbWFzayAoKF9fdjE2aGkpIF9fSS8qIGlkeCAqLywKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleDJ2YXJfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJoaTI1Nl9tYXNreiAoKF9fdjE2aGkpIF9fSS8qIGlkeCAqLywKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21hZGR1YnNfZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzEyOF9tYXNrICgoX192MTZxaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYWRkdWJzX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkdWJzdzEyOF9tYXNrICgoX192MTZxaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21hZGR1YnNfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fWCwKKyAgICAgICAgIF9fbTI1NmkgX19ZKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3MjU2X21hc2sgKChfX3YzMnFpKSBfX1gsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWFkZHVic19lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3MjU2X21hc2sgKChfX3YzMnFpKSBfX1gsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWFkZF9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21hZGRfZXBpMTYgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1hZGR3ZDEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192NHNpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWFkZF9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1hZGR3ZDI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYWRkX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2QyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OHNpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNlcGkxNl9lcGk4IChfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHNlcGkxNl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHNlcGkxNl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0c2VwaTE2X2VwaTggKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRzZXBpMTZfZXBpOCAoX19tMTI4aSBfX08sIF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHNlcGkxNl9lcGk4IChfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Zzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR1c2VwaTE2X2VwaTggKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dXNlcGkxNl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX19PLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dXNlcGkxNl9lcGk4IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0dXNlcGkxNl9lcGk4IChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z1c3diMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dXNlcGkxNl9lcGk4IChfX20xMjhpIF9fTywgX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92dXN3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR1c2VwaTE2X2VwaTggKF9fbW1hc2sxNiBfX00sIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnVzd2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTE2X2VwaTggKF9fbTEyOGkgX19BKSB7CisKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92d2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdndiMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX08sCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTE2X2VwaTggKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92d2IxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTE2X2VwaTggKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdndiMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dGVwaTE2X2VwaTggKF9fbTEyOGkgX19PLCBfX21tYXNrMTYgX19NLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z3YjI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fTywKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpMTZfZXBpOCAoX19tbWFzazE2IF9fTSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92d2IyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bGhyc19lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGhyc3cxMjhfbWFzayAoKF9fdjhoaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bGhyc19lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzEyOF9tYXNrICgoX192OGhpKSBfX1gsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX1ksCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxocnNfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzI1Nl9tYXNrICgoX192MTZoaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bGhyc19lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX1gsIF9fbTI1NmkgX19ZKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGhyc3cyNTZfbWFzayAoKF9fdjE2aGkpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1ksCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxoaV9lcHUxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxoaV9lcHUxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3MTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bGhpX2VwdTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbXVsaGlfZXB1MTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXcyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxoaV9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsaHcxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bGhpX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodzEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4aGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxoaV9lcGkxNiAoX19tMjU2aSBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGh3MjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbXVsaGlfZXBpMTYgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxodzI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3VucGFja2hpX2VwaTggKF9fbTEyOGkgX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSwKKyAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHVucGNraGJ3MTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfdW5wYWNraGlfZXBpOCAoX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHVucGNraGJ3MTI4X21hc2sgKChfX3YxNnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNraGlfZXBpOCAoX19tMjU2aSBfX1csIF9fbW1hc2szMiBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2toYncyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2szMikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2toaV9lcGk4IChfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2toYncyNTZfbWFzayAoKF9fdjMycWkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YzMnFpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza191bnBhY2toaV9lcGkxNiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2hpX2VwaTE2IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3ZDEyOF9tYXNrICgoX192OGhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OGhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192OGhpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfdW5wYWNraGlfZXBpMTYgKF9fbTI1NmkgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3ZDI1Nl9tYXNrICgoX192MTZoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3VucGFja2hpX2VwaTE2IChfX21tYXNrMTYgX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2QyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrMTYpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza191bnBhY2tsb19lcGk4IChfX20xMjhpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2xidzEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3VucGFja2xvX2VwaTggKF9fbW1hc2sxNiBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2xidzEyOF9tYXNrICgoX192MTZxaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjE2cWkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3YxNnFpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2xvX2VwaTggKF9fbTI1NmkgX19XLCBfX21tYXNrMzIgX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHVucGNrbGJ3MjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrMzIpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfdW5wYWNrbG9fZXBpOCAoX19tbWFzazMyIF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHVucGNrbGJ3MjU2X21hc2sgKChfX3YzMnFpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MzJxaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjMycWkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAoX19tbWFzazMyKSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfdW5wYWNrbG9fZXBpMTYgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHVucGNrbHdkMTI4X21hc2sgKChfX3Y4aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y4aGkpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel91bnBhY2tsb19lcGkxNiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2QxMjhfbWFzayAoKF9fdjhoaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjhoaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3VucGFja2xvX2VwaTE2IChfX20yNTZpIF9fVywgX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2QyNTZfbWFzayAoKF9fdjE2aGkpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3YxNmhpKSBfX0IsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2sxNikgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel91bnBhY2tsb19lcGkxNiAoX19tbWFzazE2IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcHVucGNrbHdkMjU2X21hc2sgKChfX3YxNmhpKSBfX0EsCisgICAgICAgICAgICAgICAoX192MTZoaSkgX19CLAorICAgICAgICAgICAgICAgKF9fdjE2aGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAoX19tbWFzazE2KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9jbXBfZXBpOF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazE2KV9fYnVpbHRpbl9pYTMyX2NtcGIxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2sxNiktMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfY21wX2VwaThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXBiMTI4X21hc2soKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMTYpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX2VwdThfbWFzayhhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wYjEyOF9tYXNrKChfX3YxNnFpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMTYpLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2NtcF9lcHU4X21hc2sobSwgYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcGIxMjhfbWFzaygoX192MTZxaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazE2KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9lcGk4X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMzIpX19idWlsdGluX2lhMzJfY21wYjI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazMyKS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXBpOF9tYXNrKG0sIGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX2NtcGIyNTZfbWFzaygoX192MzJxaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2szMikobSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9jbXBfZXB1OF9tYXNrKGEsIGIsIHApIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazMyKV9fYnVpbHRpbl9pYTMyX3VjbXBiMjU2X21hc2soKF9fdjMycWkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MzJxaSkoX19tMjU2aSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2szMiktMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfY21wX2VwdThfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2szMilfX2J1aWx0aW5faWEzMl91Y21wYjI1Nl9tYXNrKChfX3YzMnFpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjMycWkpKF9fbTI1NmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMzIpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX2VwaTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXB3MTI4X21hc2soKF9fdjhoaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKShfX20xMjhpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXBpMTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHcxMjhfbWFzaygoX192OGhpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX2VwdTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wdzEyOF9tYXNrKChfX3Y4aGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXB1MTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXB3MTI4X21hc2soKF9fdjhoaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwaTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfY21wdzI1Nl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZoaSkoX19tMjU2aSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXBpMTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl9jbXB3MjU2X21hc2soKF9fdjE2aGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMTYpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwdTE2X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrMTYpX19idWlsdGluX2lhMzJfdWNtcHcyNTZfbWFzaygoX192MTZoaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNmhpKShfX20yNTZpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazE2KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXB1MTZfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2sxNilfX2J1aWx0aW5faWEzMl91Y21wdzI1Nl9tYXNrKChfX3YxNmhpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2aGkpKF9fbTI1NmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrMTYpKG0pKTsgfSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19BVlg1MTJWTEJXSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxkcWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2bGRxaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkODU4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxkcWludHJpbi5oCkBAIC0wLDAgKzEsOTUzIEBACisvKj09PS0tLS0gYXZ4NTEydmxkcWludHJpbi5oIC0gQVZYNTEyVkwgYW5kIEFWWDUxMkRRIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdng1MTJ2bGRxaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0FWWDUxMlZMRFFJTlRSSU5fSAorI2RlZmluZSBfX0FWWDUxMlZMRFFJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eDUxMnZsLGF2eDUxMmRxIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bGxvX2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSAoKF9fdjRkaSkgX19BICogKF9fdjRkaSkgX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bGxvX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bGxvX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxscTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxsb19lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgKChfX3YyZGkpIF9fQSAqIChfX3YyZGkpIF9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxsb19lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGxxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxsb19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsbHExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hbmRub3RfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYW5kbm90X3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FuZG5wZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZG5vdF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYW5kbnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRub3RfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYW5kbnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hbmRub3RfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYW5kbnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FuZG5vdF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9hbmRucHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYW5kbm90X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FuZG5wczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRub3RfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYW5kbnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hbmRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FuZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfYW5kcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYW5kcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FuZF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9hbmRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hbmRfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfYW5kcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2FuZHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYW5kX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FuZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FuZF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hbmRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza194b3JfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLAorICAgICAgICBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3hvcnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel94b3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfeG9ycGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3hvcl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfeG9ycGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3hvcl9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl94b3JwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza194b3JfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfeG9ycHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfeG9yX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3hvcnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfeG9yX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3hvcnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3hvcl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl94b3JwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19vcl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfb3JwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfb3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfb3JwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19vcl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfb3JwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfb3JfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfb3JwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX29yX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX29ycHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfb3JfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfb3JwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfb3JfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfb3JwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9vcl9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9vcnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBkX2VwaTY0IChfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGRfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cGRfZXBpNjQgKF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cGQycXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwZF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwZF9lcHU2NCAoX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwZF9lcHU2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBkX2VwdTY0IChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBkX2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cHNfZXBpNjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRwc19lcGk2NCAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0cHNfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwc19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMycXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX2VwdTY0IChfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cHNfZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cHNfZXB1NjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1cXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwc19lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydXFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGk2NF9wZCAoX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwaTY0X3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTY0X3BkIChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBkMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpNjRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpNjRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwZDI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGk2NF9wcyAoX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcGk2NF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcGk2NF9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXBpNjRfcHMgKF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXBpNjRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpNjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cGRfZXBpNjQgKF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBkX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHRwZF9lcGk2NCAoX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQycXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cGRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBkX2VwdTY0IChfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnR0cGRfZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cGRfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cGRfZXB1NjQgKF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVxcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHRwZF9lcHU2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydXFxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwZF9lcHU2NCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJ1cXEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRwc19lcGk2NCAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwc19lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cHNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX21tX3NldHplcm9fc2kxMjgoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0dHBzX2VwaTY0IChfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dHBzX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwc19lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfbW0yNTZfc2V0emVyb19zaTI1NigpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cHNfZXB1NjQgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfbW1fc2V0emVyb19zaTEyOCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBzX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cHNfZXB1NjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGkpIF9tbV9zZXR6ZXJvX3NpMTI4KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHRwc19lcHU2NCAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJ1cXEyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2KCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cHNfZXB1NjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydXFxMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwc19lcHU2NCAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVxcTI1Nl9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkaSkgX21tMjU2X3NldHplcm9fc2kyNTYoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1NjRfcGQgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXB1NjRfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwdTY0X3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBkMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcHU2NF9wZCAoX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHU2NF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1NjRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycGQyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1NjRfcHMgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwdTY0X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1cXEycHMxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHU2NF9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdTY0X3BzIChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHU2NF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dXFxMnBzMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1NjRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHVxcTJwczI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKKyNkZWZpbmUgX21tX3JhbmdlX3BkKF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgX19DLCBcCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfcmFuZ2VfcGQoX19XLCBfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgXAorICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgX19DLCBcCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JhbmdlX3BkKF9fVSwgX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgXAorICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmFuZ2VwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsIChfX3YyZGYpIF9fQiwgX19DLCBcCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yYW5nZV9wZChfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLCAoX192NGRmKSBfX0IsIF9fQywgXAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3JhbmdlX3BkKF9fVywgX19VLCBfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgIFwKKyAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLCAoX192NGRmKSBfX0IsIF9fQywgXAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yYW5nZV9wZChfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgIFwKKyAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLCAoX192NGRmKSBfX0IsIF9fQywgXAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VKTsgfSkKKworI2RlZmluZSBfbW1fcmFuZ2VfcHMoX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIF9fQywgIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yYW5nZV9wcyhfX1csIF9fVSwgX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIF9fQywgIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csIChfX21tYXNrOCkgX19VKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmFuZ2VfcHMoX19VLCBfX0EsIF9fQiwgX19DKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JhbmdlcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLCAoX192NHNmKSBfX0IsIF9fQywgIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfbW1fc2V0emVyb19wcygpLCAoX19tbWFzazgpIF9fVSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3JhbmdlX3BzKF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgKF9fdjhzZikgX19CLCBfX0MsICBcCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcmFuZ2VfcHMoX19XLCBfX1UsIF9fQSwgX19CLCBfX0MpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgXAorICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgKF9fdjhzZikgX19CLCBfX0MsICBcCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3JhbmdlX3BzKF9fVSwgX19BLCBfX0IsIF9fQykgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgXAorICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yYW5nZXBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgKF9fdjhzZikgX19CLCBfX0MsICBcCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisjZGVmaW5lIF9tbV9yZWR1Y2VfcGQoX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgXAorICAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLCBfX0IsIFwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfbW1fc2V0emVyb19wZCgpLCAoX19tbWFzazgpIC0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19yZWR1Y2VfcGQoX19XLCBfX1UsIF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwgX19CLCBcCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2t6X3JlZHVjZV9wZChfX1UsIF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7ICAgICBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsIF9fQiwgXAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9tbV9zZXR6ZXJvX3BkKCksIChfX21tYXNrOCkgX19VKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcmVkdWNlX3BkKF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgIFwKKyAgKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwgX19CLCAgICBcCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcmVkdWNlX3BkKF9fVywgX19VLCBfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsIF9fQiwgICAgXAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrel9yZWR1Y2VfcGQoX19VLCBfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyAgICAgXAorICAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcmVkdWNlcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLCBfX0IsICAgIFwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfbW0yNTZfc2V0emVyb19wZCgpLCAoX19tbWFzazgpIF9fVSk7IH0pCisKKyNkZWZpbmUgX21tX3JlZHVjZV9wcyhfX0EsIF9fQikgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwgX19CLCAgICAgXAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgLTEpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX3JlZHVjZV9wcyhfX1csIF9fVSwgX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgXAorICAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczEyOF9tYXNrICgoX192NHNmKSBfX0EsIF9fQiwgICAgIFwKKyAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csIChfX21tYXNrOCkgX19VKTsgfSkKKworI2RlZmluZSBfbW1fbWFza3pfcmVkdWNlX3BzKF9fVSwgX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgIFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcmVkdWNlcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLCBfX0IsICAgICBcCisgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yZWR1Y2VfcHMoX19BLCBfX0IpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgXAorICAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9yZWR1Y2VwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsIF9fQiwgICAgIFwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfbW0yNTZfc2V0emVyb19wcygpLCAoX19tbWFzazgpIC0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19yZWR1Y2VfcHMoX19XLCBfX1UsIF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NikgX19idWlsdGluX2lhMzJfcmVkdWNlcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLCBfX0IsICAgICBcCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLCAoX19tbWFzazgpIF9fVSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3JlZHVjZV9wcyhfX1UsIF9fQSwgX19CKSBfX2V4dGVuc2lvbl9fICh7ICAgICBcCisgIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3JlZHVjZXBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgX19CLCAgICAgXAorICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VKTsgfSkKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4NTEydmxpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjEzNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdng1MTJ2bGludHJpbi5oCkBAIC0wLDAgKzEsNDYwNiBAQAorLyo9PT0tLS0tIGF2eDUxMnZsaW50cmluLmggLSBBVlg1MTJWTCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8YXZ4NTEydmxpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYNTEyVkxJTlRSSU5fSAorI2RlZmluZSBfX0FWWDUxMlZMSU5UUklOX0gKKworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJ2bCIpKSkKKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJhdng1MTJ2bCwgYXZ4NTEyYnciKSkpCisKKy8qIEludGVnZXIgY29tcGFyZSAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlNfQk9USAorX21tX2NtcGVxX2VwaTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKK19tbV9tYXNrX2NtcGVxX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcHUzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlNfQk9USAorX21tMjU2X2NtcGVxX2VwaTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKK19tbTI1Nl9tYXNrX2NtcGVxX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcHUzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBlcV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlNfQk9USAorX21tX2NtcGVxX2VwaTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKK19tbV9tYXNrX2NtcGVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcHU2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBlcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlNfQk9USAorX21tMjU2X2NtcGVxX2VwaTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGVxcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKK19tbTI1Nl9tYXNrX2NtcGVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9wY21wZXFxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBlcV9lcHU2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBlcV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwaTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBnZV9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ2VfZXB1MzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXBpMzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGdlX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBnZV9lcHUzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9lcGk2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ2VfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX2VwdTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGdlX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGdlX2VwaTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBnZV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ2VfZXB1NjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ2VfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKK19tbV9jbXBndF9lcGkzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICitfbW1fbWFza19jbXBndF9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0ZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXB1MzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ3RfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKK19tbTI1Nl9jbXBndF9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICitfbW0yNTZfbWFza19jbXBndF9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0ZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXB1MzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKK19tbV9jbXBndF9lcGk2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICitfbW1fbWFza19jbXBndF9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0cTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wZ3RfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKK19tbTI1Nl9jbXBndF9lcGk2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3BjbXBndHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSU19CT1RICitfbW0yNTZfbWFza19jbXBndF9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfcGNtcGd0cTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wZ3RfZXB1NjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wZ3RfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfZXBpMzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGxlX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9lcHUzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsZV9lcHUzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsZV9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbGVfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGxlX2VwdTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGxlX2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGxlX2VwaTY0X21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsZV9lcGk2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbGVfZXB1NjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbGVfZXBpNjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGxlX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsZV9lcHU2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsZV9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9lcGkzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbHRfZXBpMzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwdTMyX21hc2soX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGx0X2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGx0X2VwaTMyX21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jbXBsdF9lcGkzMl9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY21wbHRfZXB1MzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbHRfZXB1MzJfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXBpNjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NtcGx0X2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9lcHU2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KS0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tbWFzazggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jbXBsdF9lcHU2NF9tYXNrKF9fbW1hc2s4IF9fdSwgX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBsdF9lcGk2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbHRfZXBpNjRfbWFzayhfX21tYXNrOCBfX3UsIF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcGx0X2VwdTY0X21hc2soX19tMjU2aSBfX2EsIF9fbTI1NmkgX19iKSB7CisgIHJldHVybiAoX19tbWFzazgpX19idWlsdGluX2lhMzJfdWNtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NtcGx0X2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9lcGkzMl9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbmVxX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfZXB1MzJfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbmVxX2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcG5lcV9lcGkzMl9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKV9fYSwgKF9fdjhzaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbmVxX2VwaTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSlfX2EsIChfX3Y4c2kpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBuZXFfZXB1MzJfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbmVxX2VwdTMyX21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpX19hLCAoX192OHNpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9lcGk2NF9tYXNrKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKV9fYSwgKF9fdjJkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbmVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSlfX2EsIChfX3YyZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfZXB1NjRfbWFzayhfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY21wbmVxX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpX19hLCAoX192MmRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2NtcG5lcV9lcGk2NF9tYXNrKF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikgeworICByZXR1cm4gKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKV9fYSwgKF9fdjRkaSlfX2IsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbmVxX2VwaTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX21tYXNrOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jbXBuZXFfZXB1NjRfbWFzayhfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCktMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbW1hc2s4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY21wbmVxX2VwdTY0X21hc2soX19tbWFzazggX191LCBfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpIHsKKyAgcmV0dXJuIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYiwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYWRkX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWRkZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FkZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFkZHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1Yl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zdWJfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BzdWJkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3VicTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc3ViX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wc3VicTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FkZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFkZGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FkZF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhZGRxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3ViZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3ViX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wc3ViZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfc3ViX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1Yl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHN1YnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bF9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsCisgICAgICAgICAgIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTI1Nl9tYXNrICgoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bF9lcGkzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGRxMjU2X21hc2sgKChfX3Y4c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19ZLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX211bF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX1gsCisgICAgICAgIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTEyOF9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fWSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X211bF9lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bGRxMTI4X21hc2sgKChfX3Y0c2kpIF9fWCwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19ZLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bF9lcHUzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX1gsCisgICAgICAgICAgIF9fbTI1NmkgX19ZKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHEyNTZfbWFzayAoKF9fdjhzaSkgX19YLAorICAgICAgICAgICAgICAgKF9fdjhzaSkgX19ZLAorICAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bF9lcHUzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fWCwgX19tMjU2aSBfX1kpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bHVkcTI1Nl9tYXNrICgoX192OHNpKSBfX1gsCisgICAgICAgICAgICAgICAoX192OHNpKSBfX1ksCisgICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbXVsX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fWCwKKyAgICAgICAgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG11bHVkcTEyOF9tYXNrICgoX192NHNpKSBfX1gsCisgICAgICAgICAgICAgICAoX192NHNpKSBfX1ksCisgICAgICAgICAgICAgICAoX192MmRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsX2VwdTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsdWRxMTI4X21hc2sgKChfX3Y0c2kpIF9fWCwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fWSwKKyAgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbXVsbG9fZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tdWxsb19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG11bGxkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsbG9fZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxsb19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2sxNiBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtdWxsZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFuZGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FuZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFuZGQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhbmRkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhbmRkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hbmRub3RfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYW5kbmQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2FuZG5vdF9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFuZG5kMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYW5kbm90X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFuZG5kMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRub3RfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhbmRuZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX29yX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wb3JkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9vcl9lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG9yZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19vcl9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BvcmQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X29yX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wb3JkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3hvcl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3B4b3JkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhzaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel94b3JfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3B4b3JkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza194b3JfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9weG9yZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfeG9yX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9weG9yZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYW5kX2VwaTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcGFuZHEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRpKSBfX1csIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfYW5kX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYW5kcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2FuZF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhbmRxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2FuZF9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFuZHExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hbmRub3RfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYW5kbnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hbmRub3RfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhbmRucTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hbmRub3RfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLAorICAgICAgICAgICBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYW5kbnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hbmRub3RfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhbmRucTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19vcl9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgX19tMjU2aSBfX0IpCit7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG9ycTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfb3JfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKQoreworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BvcnEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfb3JfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wb3JxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9vcl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG9ycTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza194b3JfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9weG9ycTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfeG9yX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikKK3sKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9weG9ycTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfeG9yX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHhvcnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3hvcl9lcGk2NCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcHhvcnExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworI2RlZmluZSBfbW1fY21wX2VwaTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXBpMzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQxMjhfbWFzaygoX192NHNpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX2VwdTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDEyOF9tYXNrKChfX3Y0c2kpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXB1MzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMTI4X21hc2soKF9fdjRzaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwaTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBkMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXBpMzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcGQyNTZfbWFzaygoX192OHNpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwdTMyX21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wZDI1Nl9tYXNrKChfX3Y4c2kpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpKF9fbTI1NmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXB1MzJfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBkMjU2X21hc2soKF9fdjhzaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkoX19tMjU2aSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX2VwaTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXBpNjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHExMjhfbWFzaygoX192MmRpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW1fY21wX2VwdTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTEyOF9tYXNrKChfX3YyZGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGkpKF9fbTEyOGkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19jbXBfZXB1NjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMTI4X21hc2soKF9fdjJkaSkoX19tMTI4aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwaTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXBpNjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHEyNTZfbWFzaygoX192NGRpKShfX20yNTZpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX2VwdTY0X21hc2soYSwgYiwgcCkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl91Y21wcTI1Nl9tYXNrKChfX3Y0ZGkpKF9fbTI1NmkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpKF9fbTI1NmkpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfZXB1NjRfbWFzayhtLCBhLCBiLCBwKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX3VjbXBxMjU2X21hc2soKF9fdjRkaSkoX19tMjU2aSkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkoX19tMjU2aSkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0yNTZfY21wX3BzX21hc2soYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcHMyNTZfbWFzaygoX192OHNmKShfX20yNTYpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2NtcF9wc19tYXNrKG0sIGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBzMjU2X21hc2soKF9fdjhzZikoX19tMjU2KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9wZF9tYXNrKGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBkMjU2X21hc2soKF9fdjRkZikoX19tMjU2KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTYpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KS0xKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19jbXBfcGRfbWFzayhtLCBhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwZDI1Nl9tYXNrKChfX3Y0ZGYpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCkobSkpOyB9KQorCisjZGVmaW5lIF9tbTEyOF9jbXBfcHNfbWFzayhhLCBiLCBwKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX21tYXNrOClfX2J1aWx0aW5faWEzMl9jbXBwczEyOF9tYXNrKChfX3Y0c2YpKF9fbTEyOCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikoX19tMTI4KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCksIChfX21tYXNrOCktMSk7IH0pCisKKyNkZWZpbmUgX21tMTI4X21hc2tfY21wX3BzX21hc2sobSwgYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcHMxMjhfbWFzaygoX192NHNmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpKG0pKTsgfSkKKworI2RlZmluZSBfbW0xMjhfY21wX3BkX21hc2soYSwgYiwgcCkgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tbWFzazgpX19idWlsdGluX2lhMzJfY21wcGQxMjhfbWFzaygoX192MmRmKShfX20xMjgpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLCAoX19tbWFzazgpLTEpOyB9KQorCisjZGVmaW5lIF9tbTEyOF9tYXNrX2NtcF9wZF9tYXNrKG0sIGEsIGIsIHApICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbW1hc2s4KV9fYnVpbHRpbl9pYTMyX2NtcHBkMTI4X21hc2soKF9fdjJkZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjgpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKSwgKF9fbW1hc2s4KShtKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbWFkZF9wZChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZtYWRkX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNrMyAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZtYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNreiAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1zdWJfcGQoX19tMTI4ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1zdWJfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2t6ICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZubWFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQxMjhfbWFzazMgKC0oX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm5tYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDEyOF9tYXNreiAoLShfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbm1zdWJfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMTI4X21hc2t6ICgtKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2ZtYWRkX3BkKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm1hZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2szICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm1hZGRfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2t6ICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbXN1Yl9wZChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9mbXN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFza3ogKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm5tYWRkX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1Nl9tYXNrMyAoLShfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9mbm1hZGRfcGQoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2X21hc2t6ICgtKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2ZubXN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkcGQyNTZfbWFza3ogKC0oX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbWFkZF9wcyhfX20xMjggX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbWFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczEyOF9tYXNrMyAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1hZGRfcHMoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFza3ogKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1zdWJfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2Ztc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2t6ICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm5tYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2szICgtKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm5tYWRkX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2t6ICgtKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm5tc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMTI4X21hc2t6ICgtKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1hZGRfcHMoX19tMjU2IF9fQSwgX19tbWFzazggX19VLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm1hZGRfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTZfbWFzazMgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2ZtYWRkX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2t6ICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Ztc3ViX3BzKF9fbTI1NiBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9mbXN1Yl9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNreiAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2szX2ZubWFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNrMyAoLShfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2ZubWFkZF9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNreiAoLShfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2ZubXN1Yl9wcyhfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1Nl9tYXNreiAoLShfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19mbWFkZHN1Yl9wZChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZtYWRkc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDEyOF9tYXNrMyAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZtYWRkc3ViX3BkKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDEyOF9tYXNreiAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1zdWJhZGRfcGQoX19tMTI4ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZm1zdWJhZGRfcGQoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMTI4X21hc2t6ICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1hZGRzdWJfcGQoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbWFkZHN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTZfbWFzazMgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9mbWFkZHN1Yl9wZChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTZfbWFza3ogKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Ztc3ViYWRkX3BkKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Ztc3ViYWRkX3BkKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1Nl9tYXNreiAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm1hZGRzdWJfcHMoX19tMTI4IF9fQSwgX19tbWFzazggX19VLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1hZGRzdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMxMjhfbWFzazMgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2ZtYWRkc3ViX3BzKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMTI4X21hc2t6ICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2Ztc3ViYWRkX3BzKF9fbTEyOCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9mbXN1YmFkZF9wcyhfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczEyOF9tYXNreiAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1hZGRzdWJfcHMoX19tMjU2IF9fQSwgX19tbWFzazggX19VLCBfX20yNTYgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrM19mbWFkZHN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1Nl9tYXNrMyAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZm1hZGRzdWJfcHMoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTZfbWFza3ogKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZm1zdWJhZGRfcHMoX19tMjU2IF9fQSwgX19tbWFzazggX19VLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Ztc3ViYWRkX3BzKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBzMjU2X21hc2t6ICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2Ztc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJwZDEyOF9tYXNrMyAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2szX2Ztc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm1zdWJwZDI1Nl9tYXNrMyAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1zdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZtc3VicHMxMjhfbWFzazMgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2szX2Ztc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBzMjU2X21hc2szICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazNfZm1zdWJhZGRfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBkMTI4X21hc2szICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm1zdWJhZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBkMjU2X21hc2szICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbXN1YmFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwczEyOF9tYXNrMyAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm1zdWJhZGRfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHMyNTZfbWFzazMgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2ZubWFkZF9wZChfX20xMjhkIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZubWFkZHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2ZubWFkZF9wZChfX20yNTZkIF9fQSwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdmZubWFkZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm5tYWRkX3BzKF9fbTEyOCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2ZubWFkZF9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm5tc3ViX3BkKF9fbTEyOGQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2szX2ZubXN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DLCBfX21tYXNrOCBfX1UpCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBkMTI4X21hc2szICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19mbm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm5tc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQyNTZfbWFzazMgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZm5tc3ViX3BzKF9fbTEyOCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrM19mbm1zdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQywgX19tbWFzazggX19VKQoreworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdmZubXN1YnBzMTI4X21hc2szICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19DLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2ZubXN1Yl9wcyhfX20yNTYgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazNfZm5tc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MsIF9fbW1hc2s4IF9fVSkKK3sKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczI1Nl9tYXNrMyAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9hZGRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWRkX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19hZGRfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2FkZHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfYWRkcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfYWRkX3BzIChfX20xMjggX19XLCBfX21tYXNrMTYgX19VLCBfX20xMjggX19BLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9hZGRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9hZGRfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWRkX3BzIChfX20yNTYgX19XLCBfX21tYXNrMTYgX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9hZGRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hZGRfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2FkZHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2JsZW5kX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fVykgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbWRfMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYmxlbmRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19XKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYmxlbmRtZF8yNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19ibGVuZF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX1cpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9ibGVuZG1wZF8xMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2JsZW5kX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fVykgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbXBkXzI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19ibGVuZF9wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BLCBfX20xMjggX19XKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9ibGVuZG1wc18xMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2JsZW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX1cpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbXBzXzI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2JsZW5kX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fVykgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2JsZW5kbXFfMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYmxlbmRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19XKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfYmxlbmRtcV8yNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc19wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RmMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb21wcmVzc19wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGYxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkZjI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY29tcHJlc3NfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RmMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NvbXByZXNzX2VwaTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGkxMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2NvbXByZXNzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NkaTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jb21wcmVzc19lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc2RpMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jb21wcmVzc19lcGk2NCAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzZGkyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc19wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NmMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb21wcmVzc19wcyAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NmMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY29tcHJlc3NfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY29tcHJlc3NzZjI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2YpCisgICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NpMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jb21wcmVzc19lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc2kxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY29tcHJlc3NzaTI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY29tcHJlc3NfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3NpMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2NvbXByZXNzc3RvcmV1X3BkICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZWRmMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgKF9fdjJkZikgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY29tcHJlc3NzdG9yZXVfcGQgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3JlZGYyNTZfbWFzayAoKF9fdjRkZiAqKSBfX1AsCisgICAgICAgICAgICAoX192NGRmKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc3N0b3JldV9lcGk2NCAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVkaTEyOF9tYXNrICgoX192MmRpICopIF9fUCwKKyAgICAgICAgICAgIChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzc3RvcmV1X2VwaTY0ICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZWRpMjU2X21hc2sgKChfX3Y0ZGkgKikgX19QLAorICAgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY29tcHJlc3NzdG9yZXVfcHMgKHZvaWQgKl9fUCwgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVzZjEyOF9tYXNrICgoX192NHNmICopIF9fUCwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzc3RvcmV1X3BzICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICBfX2J1aWx0aW5faWEzMl9jb21wcmVzc3N0b3Jlc2YyNTZfbWFzayAoKF9fdjhzZiAqKSBfX1AsCisgICAgICAgICAgICAoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jb21wcmVzc3N0b3JldV9lcGkzMiAodm9pZCAqX19QLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIF9fYnVpbHRpbl9pYTMyX2NvbXByZXNzc3RvcmVzaTEyOF9tYXNrICgoX192NHNpICopIF9fUCwKKyAgICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2NvbXByZXNzc3RvcmV1X2VwaTMyICh2b2lkICpfX1AsIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgX19idWlsdGluX2lhMzJfY29tcHJlc3NzdG9yZXNpMjU2X21hc2sgKChfX3Y4c2kgKikgX19QLAorICAgICAgICAgICAgKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0ZXBpMzJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwZDI1Nl9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnRlcGkzMl9wZCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0ZXBpMzJfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dGVwaTMyX3BzIChfX21tYXNrMTYgX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0ZHEycHMxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcGkzMl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0ZHEycHMyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXBpMzJfcHMgKF9fbW1hc2sxNiBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9jdnRkcTJwczI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRwZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBkX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQyZHEyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRwZF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0cGQycHNfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0cGRfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnBzMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBkX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnRwZDJwczI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGRfZXB1MzIgKF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0cGRfZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cGRfZXB1MzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnRwZDJ1ZHExMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBkX2VwdTMyIChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBkX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBkX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cGQydWRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMyZHExMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBzX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0cHMyZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cHNfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX3BkIChfX20xMjhkIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfY3Z0cHMycGQxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHBzX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0cHMycGQyNTZfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0cHNfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkMjU2X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwc19lcHUzMiAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHBzX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0cHMydWRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0cHNfZXB1MzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cHNfZXB1MzIgKF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRwc19lcHUzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnVkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHBzX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnRwczJ1ZHEyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBkX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHRwZF9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnR0cGRfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dHBkX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cGRfZXB1MzIgKF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwZF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnR0cGRfZXB1MzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cGRfZXB1MzIgKF9fbTI1NmQgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBkMnVkcTI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHRwZF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9jdnR0cGRfZXB1MzIgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cGQydWRxMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dHRwc19lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2N2dHRwc19lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2N2dHRwc19lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2N2dHRwc19lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMmRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cHNfZXB1MzIgKF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfY3Z0dHBzX2VwdTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfY3Z0dHBzX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cHNfZXB1MzIgKF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0dHBzX2VwdTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfY3Z0dHBzMnVkcTI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0dHBzX2VwdTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9jdnR0cHMydWRxMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcHUzMl9wZCAoX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19jdnRlcHUzMl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHUzMl9wZCAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0ZXB1MzJfcGQgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfY3Z0ZXB1MzJfcGQgKF9fbTI1NmQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBkMjU2X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikgX19XLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1MzJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycGQyNTZfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1MzJfcHMgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHMxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2N2dGVwdTMyX3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9jdnR1ZHEycHMxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9jdnRlcHUzMl9wcyAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwdTMyX3BzIChfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19jdnRlcHUzMl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfY3Z0dWRxMnBzMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfY3Z0ZXB1MzJfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2N2dHVkcTJwczI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19kaXZfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2RpdnBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9kaXZfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZGl2cGRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Rpdl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsCisgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfZGl2cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Rpdl9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9kaXZwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19kaXZfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZGl2cHNfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZGl2X3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RpdnBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZGl2X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2RpdnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Rpdl9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9kaXZwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZXhwYW5kZGYxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kX3BkIChfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZXhwYW5kZGYxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZXhwYW5kX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRmMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGRmMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkaTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRkaTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGkyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZXhwYW5kX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kZGkyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfZXhwYW5kbG9hZHVfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkZjEyOF9tYXNrICgoX192MmRmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kbG9hZHVfcGQgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRmMTI4X21hc2sgKChfX3YyZGYgKikgX19QLAorICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2V4cGFuZGxvYWR1X3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGYyNTZfbWFzayAoKF9fdjRkZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZGxvYWR1X3BkIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRkZjI1Nl9tYXNrICgoX192NGRmICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRsb2FkdV9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRpMTI4X21hc2sgKChfX3YyZGkgKikgX19QLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRsb2FkdV9lcGk2NCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGkxMjhfbWFzayAoKF9fdjJkaSAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZXhwYW5kbG9hZHVfZXBpNjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICAgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZGRpMjU2X21hc2sgKChfX3Y0ZGkgKikgX19QLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9leHBhbmRsb2FkdV9lcGk2NCAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2FkZGkyNTZfbWFzayAoKF9fdjRkaSAqKSBfX1AsCisgICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19leHBhbmRsb2FkdV9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzZjEyOF9tYXNrICgoX192NHNmICopIF9fUCwKKyAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfZXhwYW5kbG9hZHVfcHMgKF9fbW1hc2s4IF9fVSwgdm9pZCBjb25zdCAqX19QKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2YxMjhfbWFzayAoKF9fdjRzZiAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2V4cGFuZGxvYWR1X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZXhwYW5kbG9hZHNmMjU2X21hc2sgKChfX3Y4c2YgKikgX19QLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9leHBhbmRsb2FkdV9wcyAoX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzZjI1Nl9tYXNrICgoX192OHNmICopIF9fUCwKKyAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZGxvYWR1X2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19VLCB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2kxMjhfbWFzayAoKF9fdjRzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X2V4cGFuZGxvYWR1X2VwaTMyIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzaTEyOF9tYXNrICgoX192NHNpICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRsb2FkdV9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwKKyAgICAgICAgICAgICB2b2lkIGNvbnN0ICpfX1ApIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRsb2Fkc2kyNTZfbWFzayAoKF9fdjhzaSAqKSBfX1AsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2V4cGFuZGxvYWR1X2VwaTMyIChfX21tYXNrOCBfX1UsIHZvaWQgY29uc3QgKl9fUCkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZGxvYWRzaTI1Nl9tYXNrICgoX192OHNpICopIF9fUCwKKyAgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9leHBhbmRzZjEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZXhwYW5kc2YxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSkgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfZXhwYW5kc2YyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZXhwYW5kX3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2V4cGFuZHNmMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2V4cGFuZF9lcGkzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRzaTEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9leHBhbmRfZXBpMzIgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHBhbmRzaTEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19leHBhbmRfZXBpMzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2kyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfZXhwYW5kX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfZXhwYW5kc2kyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2dldGV4cF9wZCAoX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2dldGV4cF9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9nZXRleHBfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9nZXRleHBwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZ2V0ZXhwX3BkIChfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZ2V0ZXhwX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2dldGV4cF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2dldGV4cF9wcyAoX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX2dldGV4cF9wcyAoX19tMTI4IF9fVywgX19tbWFzazggX19VLCBfX20xMjggX19BKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192NHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9nZXRleHBfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfZ2V0ZXhwcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZ2V0ZXhwX3BzIChfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfZ2V0ZXhwX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX2dldGV4cHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2dldGV4cF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9nZXRleHBwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21heHBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWF4cGRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsCisgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbWF4cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9tYXhwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4cHNfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21heHBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX21heHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9tYXhwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21pbnBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbWlucGRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsCisgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbWlucGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9taW5wZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWlucHNfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX21pbnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9taW5wczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX211bHBkX21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tdWxfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbXVscGRfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX211bF9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsCisgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfbXVscGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bF9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9tdWxwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tdWxfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbXVscHNfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbXVsX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHBzX21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbXVsX3BzIChfX20yNTYgX19XLCBfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX211bHBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X211bF9wcyAoX19tbWFzazggX19VLCBfX20yNTYgX19BLCBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9tdWxwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAoX192OHNmKQorICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcHMgKCksCisgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hYnNfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic2QxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWJzX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic2QxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfYWJzX2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNpKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X2Fic19lcGkzMiAoX19tbWFzazggX19VLCBfX20yNTZpIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BhYnNkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hYnNfZXBpNjQgKF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19hYnNfZXBpNjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfYWJzX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTEyOGkgX19BKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGFic3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Fic19lcGk2NCAoX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX2Fic19lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkaSkgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9hYnNfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMjU2aSBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wYWJzcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWF4X2VwaTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXBpMzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXhzZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcGkzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2QyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWF4X2VwaTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2QyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9tYXhfZXBpNjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21heF9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWF4X2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4c3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9tYXhfZXB1MzIgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21heF9lcHUzMiAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAoX192NHNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWF4X2VwdTMyIChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYXhfZXB1MzIgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1ZDI1Nl9tYXNrICgoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21heF9lcHU2NCAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcHU2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19tYXhfZXB1NjQgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21heF9lcHU2NCAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21heF9lcHU2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1heHVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19tYXhfZXB1NjQgKF9fbTI1NmkgX19XLCBfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLAorICAgICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtYXh1cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X21pbl9lcGkzMiAoX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc2QxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwaTMyIChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc2QxMjhfbWFzayAoKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXBpMzIgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnNkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcGkzMiAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnNkMjU2X21hc2sgKChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAoX192OHNpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc3ExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX21pbl9lcGk2NCAoX19tMTI4aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsCisgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnNxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX2VwaTY0IChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWluc3EyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX21pbl9lcGk2NCAoX19tMjU2aSBfX1csIF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsCisgICAgICAgICAgIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnNxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKSBfX1csIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfbWluX2VwaTY0IChfX21tYXNrOCBfX00sIF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zcTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfbWluX2VwdTMyIChfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIF9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19taW5fZXB1MzIgKF9fbTEyOGkgX19XLCBfX21tYXNrOCBfX00sIF9fbTEyOGkgX19BLAorICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51ZDEyOF9tYXNrICgoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19XLCBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X21pbl9lcHUzMiAoX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludWQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpCisgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3NpMjU2ICgpLAorICAgICAgICAgICAgICBfX00pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX2VwdTMyIChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludWQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fZXB1NjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjJkaSkKKyAgICAgICAgICAgICAgX21tX3NldHplcm9fc2kxMjggKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfbWluX2VwdTY0IChfX20xMjhpIF9fVywgX19tbWFzazggX19NLCBfX20xMjhpIF9fQSwKKyAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludXExMjhfbWFzayAoKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9taW5fZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnVxMTI4X21hc2sgKChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX192MmRpKQorICAgICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9taW5fZXB1NjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3BtaW51cTI1Nl9tYXNrICgoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fdjRkaSkKKyAgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fc2kyNTYgKCksCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfbWluX2VwdTY0IChfX20yNTZpIF9fVywgX19tbWFzazggX19NLCBfX20yNTZpIF9fQSwKKyAgICAgICAgICAgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl9wbWludXEyNTZfbWFzayAoKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fVywgX19NKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9taW5fZXB1NjQgKF9fbW1hc2s4IF9fTSwgX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfcG1pbnVxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19CLAorICAgICAgICAgICAgICAoX192NGRpKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19zaTI1NiAoKSwKKyAgICAgICAgICAgICAgX19NKTsKK30KKworI2RlZmluZSBfbW1fcm91bmRzY2FsZV9wZChfX0EsIF9faW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfMTI4X21hc2sgKChfX3YyZGYpIF9fQSwgXAorICAgICAgICAgICAgICAgICAgIF9faW1tLCAoX192MmRmKSBfbW1fc2V0emVyb19wZCAoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCisKKworI2RlZmluZSBfbW1fbWFza19yb3VuZHNjYWxlX3BkKF9fVywgX19VLCBfX0EsIF9faW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcGRfMTI4X21hc2sgKChfX3YyZGYpIF9fQSwgX19pbW0sIFwKKyAgICAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csIChfX21tYXNrOCkgX19VKTsgfSkKKworCisjZGVmaW5lIF9tbV9tYXNrel9yb3VuZHNjYWxlX3BkKF9fVSwgX19BLCBfX2ltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzEyOF9tYXNrICgoX192MmRmKSBfX0EsIF9faW1tLCBcCisgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX21tX3NldHplcm9fcGQgKCksIChfX21tYXNrOCkgX19VKTsgfSkKKworCisjZGVmaW5lIF9tbTI1Nl9yb3VuZHNjYWxlX3BkKF9fQSwgX19pbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF8yNTZfbWFzayAoKF9fdjRkZikgX19BLCBfX2ltbSwgXAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLCAoX19tbWFzazgpIC0xKTsgfSkKKworCisjZGVmaW5lIF9tbTI1Nl9tYXNrX3JvdW5kc2NhbGVfcGQoX19XLCBfX1UsIF9fQSwgX19pbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwZF8yNTZfbWFzayAoKF9fdjRkZikgX19BLCBfX2ltbSwgXAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3JvdW5kc2NhbGVfcGQoX19VLCBfX0EsIF9faW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9ybmRzY2FsZXBkXzI1Nl9tYXNrICgoX192NGRmKSBfX0EsIF9faW1tLCBcCisgICAgICAgICAgICAgICAgICAgKF9fdjRkZikgX21tMjU2X3NldHplcm9fcGQoKSwgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisjZGVmaW5lIF9tbV9yb3VuZHNjYWxlX3BzKF9fQSwgX19pbW0pICBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOCkgX19idWlsdGluX2lhMzJfcm5kc2NhbGVwc18xMjhfbWFzayAoKF9fdjRzZikgX19BLCBfX2ltbSwgXAorICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX21tX3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCisKKworI2RlZmluZSBfbW1fbWFza19yb3VuZHNjYWxlX3BzKF9fVywgX19VLCBfX0EsIF9faW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwgX19pbW0sIFwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fVywgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisKKyNkZWZpbmUgX21tX21hc2t6X3JvdW5kc2NhbGVfcHMoX19VLCBfX0EsIF9faW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwgX19pbW0sIFwKKyAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9tbV9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcm91bmRzY2FsZV9wcyhfX0EsIF9faW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMjU2X21hc2sgKChfX3Y4c2YpIF9fQSxfX2ltbSwgXAorICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX21tMjU2X3NldHplcm9fcHMoKSwgKF9fbW1hc2s4KSAtMSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfcm91bmRzY2FsZV9wcyhfX1csIF9fVSwgX19BLF9faW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgX19pbW0sIFwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywgKF9fbW1hc2s4KSBfX1UpOyB9KQorCisKKyNkZWZpbmUgX21tMjU2X21hc2t6X3JvdW5kc2NhbGVfcHMoX19VLCBfX0EsIF9faW1tKSAgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3JuZHNjYWxlcHNfMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwgX19pbW0sIFwKKyAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9tbTI1Nl9zZXR6ZXJvX3BzKCksIChfX21tYXNrOCkgX19VKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zY2FsZWZfcGQgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjJkZikKKyAgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NjYWxlZl9wZCAoX19tMTI4ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsCisgICAgICAgIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192MmRmKSBfX1csCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NjYWxlZl9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgICAgX21tX3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NjYWxlZl9wZCAoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc2NhbGVmcGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc2NhbGVmX3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwKKyAgICAgICAgICAgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfc2NhbGVmX3BkIChfX21tYXNrOCBfX1UsIF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgICAgKF9fdjRkZikKKyAgICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zY2FsZWZfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zY2FsZWZfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc2NhbGVmcHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc2NhbGVmX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NjYWxlZnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgIChfX3Y0c2YpCisgICAgICAgICAgICAgICBfbW1fc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NjYWxlZl9wcyAoX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc2NhbGVmcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3NjYWxlZl9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BLAorICAgICAgICAgICBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9zY2FsZWZwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAoX192OHNmKSBfX1csCisgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zY2FsZWZfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc2NhbGVmcHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCisjZGVmaW5lIF9tbV9pNjRzY2F0dGVyX3BkKF9fYWRkcixfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjJkZihfX2FkZHIsIChfX21tYXNrOCkgMHhGRiwgKF9fdjJkaSkgX19pbmRleCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0c2NhdHRlcl9wZChfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2MmRmIChfX2FkZHIsIF9fbWFzaywgKF9fdjJkaSkgX19pbmRleCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpIF9fdjEsIF9fc2NhbGUpOyB9KQorCisKKyNkZWZpbmUgX21tX2k2NHNjYXR0ZXJfZXBpNjQoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjJkaSAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsIFwKKyAgICAgICAgKF9fdjJkaSkgX19pbmRleCwgKF9fdjJkaSkgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTY0c2NhdHRlcl9lcGk2NChfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXYyZGkgKF9fYWRkciwgX19tYXNrLCAoX192MmRpKSBfX2luZGV4LFwKKyAgICAgICAgKF9fdjJkaSkgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2k2NHNjYXR0ZXJfcGQoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRkZiAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsXAorICAgICAgICAoX192NGRpKSBfX2luZGV4LCAoX192NGRmKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRzY2F0dGVyX3BkKF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0ZGYgKF9fYWRkciwgX19tYXNrLCAoX192NGRpKSBfX2luZGV4LFwKKyAgICAgICAgKF9fdjRkZikgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2k2NHNjYXR0ZXJfZXBpNjQoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRkaSAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsIChfX3Y0ZGkpIF9faW5kZXgsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fdjEsIF9fc2NhbGUpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9tYXNrX2k2NHNjYXR0ZXJfZXBpNjQoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRkaSAoX19hZGRyLCBfX21hc2ssIChfX3Y0ZGkpIF9faW5kZXgsXAorICAgICAgICAoX192NGRpKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW1faTY0c2NhdHRlcl9wcyhfX2FkZHIsIF9faW5kZXgsIF9fdjEsIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NHNmIChfX2FkZHIsIChfX21tYXNrOCkgMHhGRixcCisgICAgICAgIChfX3YyZGkpIF9faW5kZXgsIChfX3Y0c2YpIF9fdjEsIF9fc2NhbGUpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2k2NHNjYXR0ZXJfcHMoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY0c2YgKF9fYWRkciwgX19tYXNrLCAoX192MmRpKSBfX2luZGV4LFwKKyAgICAgICAgKF9fdjRzZikgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tX2k2NHNjYXR0ZXJfZXBpMzIoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjRzaSAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsXAorICAgICAgICAoX192MmRpKSBfX2luZGV4LCAoX192NHNpKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pNjRzY2F0dGVyX2VwaTMyKF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLFwKKyAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2NHNpIChfX2FkZHIsIF9fbWFzaywgKF9fdjJkaSkgX19pbmRleCxcCisgICAgICAgIChfX3Y0c2kpIF9fdjEsIF9fc2NhbGUpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9pNjRzY2F0dGVyX3BzKF9fYWRkciwgX19pbmRleCwgX192MSwgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJkaXY4c2YgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLCAoX192NGRpKSBfX2luZGV4LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRzY2F0dGVyX3BzKF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OHNmIChfX2FkZHIsIF9fbWFzaywgKF9fdjRkaSkgX19pbmRleCwgXAorICAgICAgICAoX192NHNmKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTY0c2NhdHRlcl9lcGkzMihfX2FkZHIsIF9faW5kZXgsIF9fdjEsIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyZGl2OHNpIChfX2FkZHIsIChfX21tYXNrOCkgMHhGRiwgXAorICAgICAgICAoX192NGRpKSBfX2luZGV4LCAoX192NHNpKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pNjRzY2F0dGVyX2VwaTMyKF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgIFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcmRpdjhzaShfX2FkZHIsIF9fbWFzaywgKF9fdjRkaSkgX19pbmRleCwgXAorICAgICAgICAoX192NHNpKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW1faTMyc2NhdHRlcl9wZChfX2FkZHIsIF9faW5kZXgsIF9fdjEsICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2MmRmIChfX2FkZHIsIChfX21tYXNrOCkgMHhGRiwgXAorICAgICAgICAoX192NHNpKSBfX2luZGV4LCAoX192MmRmKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJzY2F0dGVyX3BkKF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgIFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjJkZiAoX19hZGRyLCBfX21hc2ssIChfX3Y0c2kpIF9faW5kZXgsXAorICAgICAgICAgKF9fdjJkZikgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tX2kzMnNjYXR0ZXJfZXBpNjQoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjJkaSAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChfX3Y0c2kpIF9faW5kZXgsIChfX3YyZGkpIF9fdjEsIF9fc2NhbGUpOyB9KQorCisjZGVmaW5lIF9tbV9tYXNrX2kzMnNjYXR0ZXJfZXBpNjQoX19hZGRyLCBfX21hc2ssIF9faW5kZXgsIF9fdjEsIFwKKyAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjJkaSAoX19hZGRyLCBfX21hc2ssIChfX3Y0c2kpIF9faW5kZXgsIFwKKyAgICAgICAgKF9fdjJkaSkgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMnNjYXR0ZXJfcGQoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRkZiAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKF9fdjRzaSkgX19pbmRleCwgKF9fdjRkZikgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyc2NhdHRlcl9wZChfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgXAorICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NGRmIChfX2FkZHIsIF9fbWFzaywgKF9fdjRzaSkgX19pbmRleCwgXAorICAgICAgICAoX192NGRmKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW0yNTZfaTMyc2NhdHRlcl9lcGk2NChfX2FkZHIsIF9faW5kZXgsIF9fdjEsICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY0ZGkgKF9fYWRkciwgKF9fbW1hc2s4KSAweEZGLCAgXAorICAgICAgICAoX192NHNpKSBfX2luZGV4LCAoX192NGRpKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW0yNTZfbWFza19pMzJzY2F0dGVyX2VwaTY0KF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLCBcCisgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjRkaSAoX19hZGRyLCBfX21hc2ssIChfX3Y0c2kpIF9faW5kZXgsICAgXAorICAgICAgICAoX192NGRpKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW1faTMyc2NhdHRlcl9wcyhfX2FkZHIsIF9faW5kZXgsIF9fdjEsIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NHNmIChfX2FkZHIsIChfX21tYXNrOCkgMHhGRiwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoX192NHNpKSBfX2luZGV4LCAoX192NHNmKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW1fbWFza19pMzJzY2F0dGVyX3BzKF9fYWRkciwgX19tYXNrLCBfX2luZGV4LCBfX3YxLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgICAgICAgICAgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NHNmIChfX2FkZHIsIF9fbWFzaywgKF9fdjRzaSkgX19pbmRleCwgXAorICAgICAgICAoX192NHNmKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworI2RlZmluZSBfbW1faTMyc2NhdHRlcl9lcGkzMihfX2FkZHIsIF9faW5kZXgsIF9fdjEsIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2NHNpIChfX2FkZHIsIChfX21tYXNrOCkgMHhGRiwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKF9fdjRzaSkgX19pbmRleCwgKF9fdjRzaSkgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tX21hc2tfaTMyc2NhdHRlcl9lcGkzMihfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2NhbGUpIF9fZXh0ZW5zaW9uX18gKHsgICAgICBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY0c2kgKF9fYWRkciwgX19tYXNrLCAoX192NHNpKSBfX2luZGV4LFwKKyAgICAgICAgKF9fdjRzaSkgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMnNjYXR0ZXJfcHMoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjhzZiAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKF9fdjhzaSkgX19pbmRleCwgKF9fdjhzZikgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyc2NhdHRlcl9wcyhfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7ICAgICBcCisgIF9fYnVpbHRpbl9pYTMyX3NjYXR0ZXJzaXY4c2YgKF9fYWRkciwgX19tYXNrLCAoX192OHNpKSBfX2luZGV4LFwKKyAgICAgICAgKF9fdjhzZikgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2kzMnNjYXR0ZXJfZXBpMzIoX19hZGRyLCBfX2luZGV4LCBfX3YxLCBfX3NjYWxlKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2NhdHRlcnNpdjhzaSAoX19hZGRyLCAoX19tbWFzazgpIDB4RkYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKF9fdjhzaSkgX19pbmRleCwgKF9fdjhzaSkgX192MSwgX19zY2FsZSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X21hc2tfaTMyc2NhdHRlcl9lcGkzMihfX2FkZHIsIF9fbWFzaywgX19pbmRleCwgX192MSwgXAorICAgICAgICAgICAgX19zY2FsZSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2J1aWx0aW5faWEzMl9zY2F0dGVyc2l2OHNpIChfX2FkZHIsIF9fbWFzaywgKF9fdjhzaSkgX19pbmRleCwgICAgXAorICAgICAgICAoX192OHNpKSBfX3YxLCBfX3NjYWxlKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3NxcnRfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3FydHBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfc3FydF9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSkgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3NxcnRwZDEyOF9tYXNrICgoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGYpCisgICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zcXJ0X3BkIChfX20yNTZkIF9fVywgX19tbWFzazggX19VLCBfX20yNTZkIF9fQSkgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3NxcnRwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fVywKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3NxcnRfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zcXJ0cGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAoX192NGRmKQorICAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wZCAoKSwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zcXJ0X3BzIChfX20xMjggX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NxcnRwczEyOF9tYXNrICgoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRzZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3NxcnRfcHMgKF9fbW1hc2s4IF9fVSwgX19tMTI4IF9fQSkgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3FydHBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAoX192NHNmKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tfc3FydF9wcyAoX19tMjU2IF9fVywgX19tbWFzazggX19VLCBfX20yNTYgX19BKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl9zcXJ0cHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9zcXJ0X3BzIChfX21tYXNrOCBfX1UsIF9fbTI1NiBfX0EpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3NxcnRwczI1Nl9tYXNrICgoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgICBfbW0yNTZfc2V0emVyb19wcyAoKSwKKyAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJfcGQgKF9fbTEyOGQgX19XLCBfX21tYXNrOCBfX1UsIF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3N1YnBkMTI4X21hc2sgKChfX3YyZGYpIF9fQSwKKyAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgKF9fdjJkZikgX19XLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9zdWJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfc3VicGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192MmRmKQorICAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BkICgpLAorICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3N1Yl9wZCAoX19tMjU2ZCBfX1csIF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsCisgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfc3VicGQyNTZfbWFzayAoKF9fdjRkZikgX19BLAorICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAoX192NGRmKSBfX1csCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1Yl9wZCAoX19tbWFzazggX19VLCBfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl9zdWJwZDI1Nl9tYXNrICgoX192NGRmKSBfX0EsCisgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgIChfX3Y0ZGYpCisgICAgICAgICAgICAgX21tMjU2X3NldHplcm9fcGQgKCksCisgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19zdWJfcHMgKF9fbTEyOCBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3N1YnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y0c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3N1Yl9wcyAoX19tbWFzazE2IF9fVSwgX19tMTI4IF9fQSwgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfc3VicHMxMjhfbWFzayAoKF9fdjRzZikgX19BLAorICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgKF9fdjRzZikKKyAgICAgICAgICAgIF9tbV9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19zdWJfcHMgKF9fbTI1NiBfX1csIF9fbW1hc2sxNiBfX1UsIF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3N1YnBzMjU2X21hc2sgKChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgIChfX3Y4c2YpIF9fVywKKyAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2t6X3N1Yl9wcyAoX19tbWFzazE2IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfc3VicHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgKF9fdjhzZikKKyAgICAgICAgICAgIF9tbTI1Nl9zZXR6ZXJvX3BzICgpLAorICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2syX3Blcm11dGV4MnZhcl9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJkMTI4X21hc2sgKChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazJfcGVybXV0ZXgydmFyX2VwaTMyIChfX20yNTZpIF9fQSwgX19tMjU2aSBfX0ksCisgICAgICAgICBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcmQyNTZfbWFzayAoKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrMl9wZXJtdXRleDJ2YXJfcGQgKF9fbTEyOGQgX19BLCBfX20xMjhpIF9fSSwgX19tbWFzazggX19VLAorICAgICAgICAgX19tMTI4ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycGQxMjhfbWFzayAoKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAoX192MmRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFzazJfcGVybXV0ZXgydmFyX3BkIChfX20yNTZkIF9fQSwgX19tMjU2aSBfX0ksIF9fbW1hc2s4IF9fVSwKKyAgICAgICAgICAgIF9fbTI1NmQgX19CKSB7CisgIHJldHVybiAoX19tMjU2ZCkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnBkMjU2X21hc2sgKChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFzazJfcGVybXV0ZXgydmFyX3BzIChfX20xMjggX19BLCBfX20xMjhpIF9fSSwgX19tbWFzazggX19VLAorICAgICAgICAgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdnBlcm1pMnZhcnBzMTI4X21hc2sgKChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrMl9wZXJtdXRleDJ2YXJfcHMgKF9fbTI1NiBfX0EsIF9fbTI1NmkgX19JLCBfX21tYXNrOCBfX1UsCisgICAgICAgICAgICBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycHMyNTZfbWFzayAoKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrMl9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fSSwgX19tbWFzazggX19VLAorICAgICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybWkydmFycTEyOF9tYXNrICgoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2syX3Blcm11dGV4MnZhcl9lcGk2NCAoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19JLAorICAgICAgICAgX19tbWFzazggX19VLCBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaTJ2YXJxMjU2X21hc2sgKChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybXV0ZXgydmFyX2VwaTMyIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQxMjhfbWFzayAoKF9fdjRzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tfcGVybXV0ZXgydmFyX2VwaTMyIChfX20xMjhpIF9fQSwgX19tbWFzazggX19VLCBfX20xMjhpIF9fSSwKKyAgICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDEyOF9tYXNrICgoX192NHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4MnZhcl9lcGkzMiAoX19tbWFzazggX19VLCBfX20xMjhpIF9fQSwgX19tMTI4aSBfX0ksCisgICAgICAgICAgICBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkMTI4X21hc2t6ICgoX192NHNpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjRzaSkgX19BLAorICAgICAgICAgICAgICAoX192NHNpKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFyZDI1Nl9tYXNrICgoX192OHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OHNpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleDJ2YXJfZXBpMzIgKF9fbTI1NmkgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19JLAorICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJkMjU2X21hc2sgKChfX3Y4c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXgydmFyX2VwaTMyIChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcmQyNTZfbWFza3ogKChfX3Y4c2kpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192OHNpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2kpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV4MnZhcl9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGkgX19JLCBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDEyOF9tYXNrICgoX192MmRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAoX192MmRmKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkgLQorICAgICAgICAgICAgICAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3Blcm11dGV4MnZhcl9wZCAoX19tMTI4ZCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0ksCisgICAgICAgIF9fbTEyOGQgX19CKSB7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBkMTI4X21hc2sgKChfX3YyZGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192MmRmKSBfX0EsCisgICAgICAgICAgICAgIChfX3YyZGYpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2t6X3Blcm11dGV4MnZhcl9wZCAoX19tbWFzazggX19VLCBfX20xMjhkIF9fQSwgX19tMTI4aSBfX0ksCisgICAgICAgICBfX20xMjhkIF9fQikgeworICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDEyOF9tYXNreiAoKF9fdjJkaSkgX19JCisgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgKF9fdjJkZikgX19BLAorICAgICAgICAgICAgICAgKF9fdjJkZikgX19CLAorICAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleDJ2YXJfcGQgKF9fbTI1NmQgX19BLCBfX20yNTZpIF9fSSwgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQyNTZfbWFzayAoKF9fdjRkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpIC0KKyAgICAgICAgICAgICAgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleDJ2YXJfcGQgKF9fbTI1NmQgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19JLAorICAgICAgICAgICBfX20yNTZkIF9fQikgeworICByZXR1cm4gKF9fbTI1NmQpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwZDI1Nl9tYXNrICgoX192NGRpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjRkZikgX19BLAorICAgICAgICAgICAgICAoX192NGRmKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleDJ2YXJfcGQgKF9fbW1hc2s4IF9fVSwgX19tMjU2ZCBfX0EsIF9fbTI1NmkgX19JLAorICAgICAgICAgICAgX19tMjU2ZCBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZkKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycGQyNTZfbWFza3ogKChfX3Y0ZGkpIF9fSQorICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQSwKKyAgICAgICAgICAgICAgIChfX3Y0ZGYpIF9fQiwKKyAgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wZXJtdXRleDJ2YXJfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOGkgX19JLCBfX20xMjggX19CKSB7CisgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHMxMjhfbWFzayAoKF9fdjRzaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjRzZikgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza19wZXJtdXRleDJ2YXJfcHMgKF9fbTEyOCBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0ksCisgICAgICAgIF9fbTEyOCBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczEyOF9tYXNrICgoX192NHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza3pfcGVybXV0ZXgydmFyX3BzIChfX21tYXNrOCBfX1UsIF9fbTEyOCBfX0EsIF9fbTEyOGkgX19JLAorICAgICAgICAgX19tMTI4IF9fQikgeworICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzMTI4X21hc2t6ICgoX192NHNpKSBfX0kKKyAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgKF9fdjRzZikgX19BLAorICAgICAgICAgICAgICAoX192NHNmKSBfX0IsCisgICAgICAgICAgICAgIChfX21tYXNrOCkKKyAgICAgICAgICAgICAgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV4MnZhcl9wcyAoX19tMjU2IF9fQSwgX19tMjU2aSBfX0ksIF9fbTI1NiBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTYpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJwczI1Nl9tYXNrICgoX192OHNpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192OHNmKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrX3Blcm11dGV4MnZhcl9wcyAoX19tMjU2IF9fQSwgX19tbWFzazggX19VLCBfX20yNTZpIF9fSSwKKyAgICAgICAgICAgX19tMjU2IF9fQikgeworICByZXR1cm4gKF9fbTI1NikgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnBzMjU2X21hc2sgKChfX3Y4c2kpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjhzZikgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrel9wZXJtdXRleDJ2YXJfcHMgKF9fbW1hc2s4IF9fVSwgX19tMjU2IF9fQSwgX19tMjU2aSBfX0ksCisgICAgICAgICAgICBfX20yNTYgX19CKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycHMyNTZfbWFza3ogKChfX3Y4c2kpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192OHNmKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y4c2YpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV4MnZhcl9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLCBfX20xMjhpIF9fQikgeworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxMTI4X21hc2sgKChfX3YyZGkpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3YyZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrX3Blcm11dGV4MnZhcl9lcGk2NCAoX19tMTI4aSBfX0EsIF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0ksCisgICAgICAgICAgIF9fbTEyOGkgX19CKSB7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnExMjhfbWFzayAoKF9fdjJkaSkgX19JCisgICAgICAgICAgICAgICAgICAgLyogaWR4ICovICwKKyAgICAgICAgICAgICAgICAgICAoX192MmRpKSBfX0EsCisgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAgICAgIChfX21tYXNrOCkgX19VKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrel9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbW1hc2s4IF9fVSwgX19tMTI4aSBfX0EsIF9fbTEyOGkgX19JLAorICAgICAgICAgICAgX19tMTI4aSBfX0IpIHsKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTEyOF9tYXNreiAoKF9fdjJkaSkgX19JCisgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgIChfX3YyZGkpIF9fQSwKKyAgICAgICAgICAgICAgKF9fdjJkaSkgX19CLAorICAgICAgICAgICAgICAoX19tbWFzazgpCisgICAgICAgICAgICAgIF9fVSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTI1NmkgX19BLCBfX20yNTZpIF9fSSwgX19tMjU2aSBfX0IpIHsKKyAgcmV0dXJuIChfX20yNTZpKSBfX2J1aWx0aW5faWEzMl92cGVybXQydmFycTI1Nl9tYXNrICgoX192NGRpKSBfX0kKKyAgICAgICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQSwKKyAgICAgICAgICAgICAgICAgICAoX192NGRpKSBfX0IsCisgICAgICAgICAgICAgICAgICAgKF9fbW1hc2s4KSAtMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza19wZXJtdXRleDJ2YXJfZXBpNjQgKF9fbTI1NmkgX19BLCBfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19JLAorICAgICAgICBfX20yNTZpIF9fQikgeworICByZXR1cm4gKF9fbTI1NmkpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtdDJ2YXJxMjU2X21hc2sgKChfX3Y0ZGkpIF9fSQorICAgICAgICAgICAgICAgICAgIC8qIGlkeCAqLyAsCisgICAgICAgICAgICAgICAgICAgKF9fdjRkaSkgX19BLAorICAgICAgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgICAgICAoX19tbWFzazgpIF9fVSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3pfcGVybXV0ZXgydmFyX2VwaTY0IChfX21tYXNrOCBfX1UsIF9fbTI1NmkgX19BLAorICAgICAgICAgX19tMjU2aSBfX0ksIF9fbTI1NmkgX19CKSB7CisgIHJldHVybiAoX19tMjU2aSkgX19idWlsdGluX2lhMzJfdnBlcm10MnZhcnEyNTZfbWFza3ogKChfX3Y0ZGkpIF9fSQorICAgICAgICAgICAgICAvKiBpZHggKi8gLAorICAgICAgICAgICAgICAoX192NGRpKSBfX0EsCisgICAgICAgICAgICAgIChfX3Y0ZGkpIF9fQiwKKyAgICAgICAgICAgICAgKF9fbW1hc2s4KQorICAgICAgICAgICAgICBfX1UpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTX0JPVEgKKworI2VuZGlmIC8qIF9fQVZYNTEyVkxJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9hdnhpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxY2E1NAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYXZ4aW50cmluLmgKQEAgLTAsMCArMSwxMzE4IEBACisvKj09PS0tLS0gYXZ4aW50cmluLmggLSBBVlggaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxhdnhpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQVZYSU5UUklOX0gKKyNkZWZpbmUgX19BVlhJTlRSSU5fSAorCit0eXBlZGVmIGRvdWJsZSBfX3Y0ZGYgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGZsb2F0IF9fdjhzZiBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgbG9uZyBsb25nIF9fdjRkaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgaW50IF9fdjhzaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgc2hvcnQgX192MTZoaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgzMikpKTsKK3R5cGVkZWYgY2hhciBfX3YzMnFpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDMyKSkpOworCisvKiBXZSBuZWVkIGFuIGV4cGxpY2l0bHkgc2lnbmVkIHZhcmlhbnQgZm9yIGNoYXIuIE5vdGUgdGhhdCB0aGlzIHNob3VsZG4ndAorICogYXBwZWFyIGluIHRoZSBpbnRlcmZhY2UgdGhvdWdoLiAqLwordHlwZWRlZiBzaWduZWQgY2hhciBfX3YzMnFzIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygzMikpKTsKKwordHlwZWRlZiBmbG9hdCBfX20yNTYgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMzIpKSk7Cit0eXBlZGVmIGRvdWJsZSBfX20yNTZkIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygzMikpKTsKK3R5cGVkZWYgbG9uZyBsb25nIF9fbTI1NmkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDMyKSkpOworCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImF2eCIpKSkKKworLyogQXJpdGhtZXRpYyAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIF9fYStfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYWRkX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2ErX19iOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gX19hLV9fYjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdWJfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIF9fYS1fX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZHN1Yl9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9hZGRzdWJwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FkZHN1Yl9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9hZGRzdWJwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9kaXZfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Rpdl9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gX19hIC8gX19iOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfbWF4cGQyNTYoKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXhfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfbWF4cHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX21pbnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWluX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX21pbnBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X211bF9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXVsX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NxcnRfcGQoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9zcXJ0cGQyNTYoKF9fdjRkZilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NxcnRfcHMoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfc3FydHBzMjU2KChfX3Y4c2YpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yc3FydF9wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yc3FydHBzMjU2KChfX3Y4c2YpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9yY3BfcHMoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfcmNwcHMyNTYoKF9fdjhzZilfX2EpOworfQorCisjZGVmaW5lIF9tbTI1Nl9yb3VuZF9wZChWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9yb3VuZHBkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKFYpLCAoTSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9yb3VuZF9wcyhWLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9yb3VuZHBzMjU2KChfX3Y4c2YpKF9fbTI1NikoViksIChNKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NlaWxfcGQoVikgIF9tbTI1Nl9yb3VuZF9wZCgoViksIF9NTV9GUk9VTkRfQ0VJTCkKKyNkZWZpbmUgX21tMjU2X2Zsb29yX3BkKFYpIF9tbTI1Nl9yb3VuZF9wZCgoViksIF9NTV9GUk9VTkRfRkxPT1IpCisjZGVmaW5lIF9tbTI1Nl9jZWlsX3BzKFYpICBfbW0yNTZfcm91bmRfcHMoKFYpLCBfTU1fRlJPVU5EX0NFSUwpCisjZGVmaW5lIF9tbTI1Nl9mbG9vcl9wcyhWKSBfbW0yNTZfcm91bmRfcHMoKFYpLCBfTU1fRlJPVU5EX0ZMT09SKQorCisvKiBMb2dpY2FsICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9hbmRfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGkpX19hICYgKF9fdjRkaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FuZF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NikoKF9fdjhzaSlfX2EgJiAoX192OHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FuZG5vdF9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiAoX19tMjU2ZCkofihfX3Y0ZGkpX19hICYgKF9fdjRkaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2FuZG5vdF9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NikofihfX3Y4c2kpX19hICYgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9vcl9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiAoX19tMjU2ZCkoKF9fdjRkaSlfX2EgfCAoX192NGRpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfb3JfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpKChfX3Y4c2kpX19hIHwgKF9fdjhzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl94b3JfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gKF9fbTI1NmQpKChfX3Y0ZGkpX19hIF4gKF9fdjRkaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3hvcl9wcyhfX20yNTYgX19hLCBfX20yNTYgX19iKQoreworICByZXR1cm4gKF9fbTI1NikoKF9fdjhzaSlfX2EgXiAoX192OHNpKV9fYik7Cit9CisKKy8qIEhvcml6b250YWwgYXJpdGhtZXRpYyAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaGFkZF9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9oYWRkcGQyNTYoKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oYWRkX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2hhZGRwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9oc3ViX3BkKF9fbTI1NmQgX19hLCBfX20yNTZkIF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX2hzdWJwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2hzdWJfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfaHN1YnBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNmKV9fYik7Cit9CisKKy8qIFZlY3RvciBwZXJtdXRhdGlvbnMgKi8KK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Blcm11dGV2YXJfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGkgX19jKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkKChfX3YyZGYpX19hLCAoX192MmRpKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Blcm11dGV2YXJfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmkgX19jKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkMjU2KChfX3Y0ZGYpX19hLCAoX192NGRpKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybXV0ZXZhcl9wcyhfX20xMjggX19hLCBfX20xMjhpIF9fYykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzKChfX3Y0c2YpX19hLCAoX192NHNpKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfcGVybXV0ZXZhcl9wcyhfX20yNTYgX19hLCBfX20yNTZpIF9fYykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzMjU2KChfX3Y4c2YpX19hLCAoX192OHNpKV9fYyk7Cit9CisKKyNkZWZpbmUgX21tX3Blcm11dGVfcGQoQSwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGYpKF9fbTEyOGQpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpX21tX3NldHplcm9fcGQoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQykgJiAweDEsICgoQykgJiAweDIpID4+IDEpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlX3BkKEEsIEMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NGRmKShfX20yNTZkKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKV9tbTI1Nl9zZXR6ZXJvX3BkKCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEMpICYgMHgxLCAoKEMpICYgMHgyKSA+PiAxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyAoKChDKSAmIDB4NCkgPj4gMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArICgoKEMpICYgMHg4KSA+PiAzKSk7IH0pCisKKyNkZWZpbmUgX21tX3Blcm11dGVfcHMoQSwgQykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZikoX19tMTI4KShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpX21tX3NldHplcm9fcHMoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQykgJiAweDMsICgoQykgJiAweGMpID4+IDIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDKSAmIDB4MzApID4+IDQsICgoQykgJiAweGMwKSA+PiA2KTsgfSkKKworI2RlZmluZSBfbW0yNTZfcGVybXV0ZV9wcyhBLCBDKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNmKShfX20yNTYpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZilfbW0yNTZfc2V0emVyb19wcygpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEMpICYgMHgzLCAoKEMpICYgMHhjKSA+PiAyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDKSAmIDB4MzApID4+IDQsICgoQykgJiAweGMwKSA+PiA2LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpICYgMHgwMykgPj4gMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoQykgJiAweDBjKSA+PiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChDKSAmIDB4MzApID4+IDQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKEMpICYgMHhjMCkgPj4gNikpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlMmYxMjhfcGQoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdnBlcm0yZjEyOF9wZDI1NigoX192NGRmKShfX20yNTZkKShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRmKShfX20yNTZkKShWMiksIChNKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Blcm11dGUyZjEyOF9wcyhWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZwZXJtMmYxMjhfcHMyNTYoKF9fdjhzZikoX19tMjU2KShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoVjIpLCAoTSkpOyB9KQorCisjZGVmaW5lIF9tbTI1Nl9wZXJtdXRlMmYxMjhfc2kyNTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmkpX19idWlsdGluX2lhMzJfdnBlcm0yZjEyOF9zaTI1NigoX192OHNpKShfX20yNTZpKShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShWMiksIChNKSk7IH0pCisKKy8qIFZlY3RvciBCbGVuZCAqLworI2RlZmluZSBfbW0yNTZfYmxlbmRfcGQoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkZikoX19tMjU2ZCkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFYyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gNCA6IDApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyA1IDogMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA0KSA/IDYgOiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gNyA6IDMpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfYmxlbmRfcHMoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OHNmKShfX20yNTYpKFYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4c2YpKF9fbTI1NikoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/ICA4IDogMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gIDkgOiAxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwNCkgPyAxMCA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDExIDogMyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMTIgOiA0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgyMCkgPyAxMyA6IDUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDQwKSA/IDE0IDogNiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMTUgOiA3KSk7IH0pCisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2JsZW5kdl9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IsIF9fbTI1NmQgX19jKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfYmxlbmR2cGQyNTYoCisgICAgKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iLCAoX192NGRmKV9fYyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYmxlbmR2X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IsIF9fbTI1NiBfX2MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX2JsZW5kdnBzMjU2KAorICAgIChfX3Y4c2YpX19hLCAoX192OHNmKV9fYiwgKF9fdjhzZilfX2MpOworfQorCisvKiBWZWN0b3IgRG90IFByb2R1Y3QgKi8KKyNkZWZpbmUgX21tMjU2X2RwX3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfZHBwczI1NigoX192OHNmKShfX20yNTYpKFYxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShWMiksIChNKSk7IH0pCisKKy8qIFZlY3RvciBzaHVmZmxlICovCisjZGVmaW5lIF9tbTI1Nl9zaHVmZmxlX3BzKGEsIGIsIG1hc2spIF9fZXh0ZW5zaW9uX18gKHsgXAorICAgICAgICAoX19tMjU2KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4c2YpKF9fbTI1NikoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKGIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hc2spICYgMHgzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChtYXNrKSAmIDB4YykgPj4gMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKG1hc2spICYgMHgzMCkgPj4gNCkgKyA4LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobWFzaykgJiAweGMwKSA+PiA2KSArIDgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG1hc2spICYgMHgzKSArIDQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChtYXNrKSAmIDB4YykgPj4gMikgKyA0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobWFzaykgJiAweDMwKSA+PiA0KSArIDEyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobWFzaykgJiAweGMwKSA+PiA2KSArIDEyKTsgfSkKKworI2RlZmluZSBfbW0yNTZfc2h1ZmZsZV9wZChhLCBiLCBtYXNrKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgICAgICAgKF9fbTI1NmQpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRkZikoX19tMjU2ZCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hc2spICYgMHgxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKG1hc2spICYgMHgyKSA+PiAxKSArIDQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobWFzaykgJiAweDQpID4+IDIpICsgMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChtYXNrKSAmIDB4OCkgPj4gMykgKyA2KTsgfSkKKworLyogQ29tcGFyZSAqLworI2RlZmluZSBfQ01QX0VRX09RICAgIDB4MDAgLyogRXF1YWwgKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xUX09TICAgIDB4MDEgLyogTGVzcy10aGFuIChvcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xFX09TICAgIDB4MDIgLyogTGVzcy10aGFuLW9yLWVxdWFsIChvcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX1VOT1JEX1EgIDB4MDMgLyogVW5vcmRlcmVkIChub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfVVEgICAweDA0IC8qIE5vdC1lcXVhbCAodW5vcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTFRfVVMgICAweDA1IC8qIE5vdC1sZXNzLXRoYW4gKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTEVfVVMgICAweDA2IC8qIE5vdC1sZXNzLXRoYW4tb3ItZXF1YWwgKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9PUkRfUSAgICAweDA3IC8qIE9yZGVyZWQgKG5vbnNpZ25hbGluZykgICAqLworI2RlZmluZSBfQ01QX0VRX1VRICAgIDB4MDggLyogRXF1YWwgKHVub3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfTkdFX1VTICAgMHgwOSAvKiBOb3QtZ3JlYXRlci10aGFuLW9yLWVxdWFsICh1bm9yZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OR1RfVVMgICAweDBhIC8qIE5vdC1ncmVhdGVyLXRoYW4gKHVub3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9GQUxTRV9PUSAweDBiIC8qIEZhbHNlIChvcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfT1EgICAweDBjIC8qIE5vdC1lcXVhbCAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR0VfT1MgICAgMHgwZCAvKiBHcmVhdGVyLXRoYW4tb3ItZXF1YWwgKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR1RfT1MgICAgMHgwZSAvKiBHcmVhdGVyLXRoYW4gKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfVFJVRV9VUSAgMHgwZiAvKiBUcnVlICh1bm9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0VRX09TICAgIDB4MTAgLyogRXF1YWwgKG9yZGVyZWQsIHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfTFRfT1EgICAgMHgxMSAvKiBMZXNzLXRoYW4gKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX0xFX09RICAgIDB4MTIgLyogTGVzcy10aGFuLW9yLWVxdWFsIChvcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9VTk9SRF9TICAweDEzIC8qIFVub3JkZXJlZCAoc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfVVMgICAweDE0IC8qIE5vdC1lcXVhbCAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX05MVF9VUSAgIDB4MTUgLyogTm90LWxlc3MtdGhhbiAodW5vcmRlcmVkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9OTEVfVVEgICAweDE2IC8qIE5vdC1sZXNzLXRoYW4tb3ItZXF1YWwgKHVub3JkLCBub24tc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9PUkRfUyAgICAweDE3IC8qIE9yZGVyZWQgKHNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfRVFfVVMgICAgMHgxOCAvKiBFcXVhbCAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX05HRV9VUSAgIDB4MTkgLyogTm90LWdyZWF0ZXItdGhhbi1vci1lcXVhbCAodW5vcmQsIG5vbi1zaWduKSAgKi8KKyNkZWZpbmUgX0NNUF9OR1RfVVEgICAweDFhIC8qIE5vdC1ncmVhdGVyLXRoYW4gKHVub3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfRkFMU0VfT1MgMHgxYiAvKiBGYWxzZSAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9ORVFfT1MgICAweDFjIC8qIE5vdC1lcXVhbCAob3JkZXJlZCwgc2lnbmFsaW5nKSAgKi8KKyNkZWZpbmUgX0NNUF9HRV9PUSAgICAweDFkIC8qIEdyZWF0ZXItdGhhbi1vci1lcXVhbCAob3JkZXJlZCwgbm9uLXNpZ25hbGluZykgICovCisjZGVmaW5lIF9DTVBfR1RfT1EgICAgMHgxZSAvKiBHcmVhdGVyLXRoYW4gKG9yZGVyZWQsIG5vbi1zaWduYWxpbmcpICAqLworI2RlZmluZSBfQ01QX1RSVUVfVVMgIDB4MWYgLyogVHJ1ZSAodW5vcmRlcmVkLCBzaWduYWxpbmcpICAqLworCisjZGVmaW5lIF9tbV9jbXBfcGQoYSwgYiwgYykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcHBkKChfX3YyZGYpKF9fbTEyOGQpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKGIpLCAoYykpOyB9KQorCisjZGVmaW5lIF9tbV9jbXBfcHMoYSwgYiwgYykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wcHMoKF9fdjRzZikoX19tMTI4KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoYiksIChjKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9wZChhLCBiLCBjKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NmQpX19idWlsdGluX2lhMzJfY21wcGQyNTYoKF9fdjRkZikoX19tMjU2ZCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoYiksIChjKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X2NtcF9wcyhhLCBiLCBjKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTI1NilfX2J1aWx0aW5faWEzMl9jbXBwczI1NigoX192OHNmKShfX20yNTYpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhzZikoX19tMjU2KShiKSwgKGMpKTsgfSkKKworI2RlZmluZSBfbW1fY21wX3NkKGEsIGIsIGMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBzZCgoX192MmRmKShfX20xMjhkKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShiKSwgKGMpKTsgfSkKKworI2RlZmluZSBfbW1fY21wX3NzKGEsIGIsIGMpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcHNzKChfX3Y0c2YpKF9fbTEyOCkoYSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKGIpLCAoYykpOyB9KQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2V4dHJhY3RfZXBpMzIoX19tMjU2aSBfX2EsIGNvbnN0IGludCBfX2ltbSkKK3sKKyAgX192OHNpIF9fYiA9IChfX3Y4c2kpX19hOworICByZXR1cm4gX19iW19faW1tICYgN107Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZXh0cmFjdF9lcGkxNihfX20yNTZpIF9fYSwgY29uc3QgaW50IF9faW1tKQoreworICBfX3YxNmhpIF9fYiA9IChfX3YxNmhpKV9fYTsKKyAgcmV0dXJuIF9fYltfX2ltbSAmIDE1XTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9leHRyYWN0X2VwaTgoX19tMjU2aSBfX2EsIGNvbnN0IGludCBfX2ltbSkKK3sKKyAgX192MzJxaSBfX2IgPSAoX192MzJxaSlfX2E7CisgIHJldHVybiBfX2JbX19pbW0gJiAzMV07Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmUgbG9uZyBsb25nICBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9leHRyYWN0X2VwaTY0KF9fbTI1NmkgX19hLCBjb25zdCBpbnQgX19pbW0pCit7CisgIF9fdjRkaSBfX2IgPSAoX192NGRpKV9fYTsKKyAgcmV0dXJuIF9fYltfX2ltbSAmIDNdOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2luc2VydF9lcGkzMihfX20yNTZpIF9fYSwgaW50IF9fYiwgaW50IGNvbnN0IF9faW1tKQoreworICBfX3Y4c2kgX19jID0gKF9fdjhzaSlfX2E7CisgIF9fY1tfX2ltbSAmIDddID0gX19iOworICByZXR1cm4gKF9fbTI1NmkpX19jOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9pbnNlcnRfZXBpMTYoX19tMjU2aSBfX2EsIGludCBfX2IsIGludCBjb25zdCBfX2ltbSkKK3sKKyAgX192MTZoaSBfX2MgPSAoX192MTZoaSlfX2E7CisgIF9fY1tfX2ltbSAmIDE1XSA9IF9fYjsKKyAgcmV0dXJuIChfX20yNTZpKV9fYzsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfaW5zZXJ0X2VwaTgoX19tMjU2aSBfX2EsIGludCBfX2IsIGludCBjb25zdCBfX2ltbSkKK3sKKyAgX192MzJxaSBfX2MgPSAoX192MzJxaSlfX2E7CisgIF9fY1tfX2ltbSAmIDMxXSA9IF9fYjsKKyAgcmV0dXJuIChfX20yNTZpKV9fYzsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2luc2VydF9lcGk2NChfX20yNTZpIF9fYSwgbG9uZyBsb25nIF9fYiwgaW50IGNvbnN0IF9faW1tKQoreworICBfX3Y0ZGkgX19jID0gKF9fdjRkaSlfX2E7CisgIF9fY1tfX2ltbSAmIDNdID0gX19iOworICByZXR1cm4gKF9fbTI1NmkpX19jOworfQorI2VuZGlmCisKKy8qIENvbnZlcnNpb24gKi8KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dGVwaTMyX3BkKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfY3Z0ZHEycGQyNTYoKF9fdjRzaSkgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRlcGkzMl9wcyhfX20yNTZpIF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfY3Z0ZHEycHMyNTYoKF9fdjhzaSkgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnRwZF9wcyhfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0cGQycHMyNTYoKF9fdjRkZikgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cHNfZXBpMzIoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxMjU2KChfX3Y4c2YpIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2N2dHBzX3BkKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl9jdnRwczJwZDI1NigoX192NHNmKSBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cGRfZXBpMzIoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnR0cGQyZHEyNTYoKF9fdjRkZikgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY3Z0cGRfZXBpMzIoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJkcTI1NigoX192NGRmKSBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jdnR0cHNfZXBpMzIoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTI1NigoX192OHNmKSBfX2EpOworfQorCisvKiBWZWN0b3IgcmVwbGljYXRlICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21vdmVoZHVwX3BzKF9fbTI1NiBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMSwgMSwgMywgMywgNSwgNSwgNywgNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92ZWxkdXBfcHMoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAwLCAyLCAyLCA0LCA0LCA2LCA2KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbW92ZWR1cF9wZChfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAwLCAyLCAyKTsKK30KKworLyogVW5wYWNrIGFuZCBJbnRlcmxlYXZlICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2toaV9wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMSwgNSwgMSsyLCA1KzIpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bnBhY2tsb19wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMCwgNCwgMCsyLCA0KzIpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VucGFja2hpX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMiwgMTAsIDIrMSwgMTArMSwgNiwgMTQsIDYrMSwgMTQrMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5wYWNrbG9fcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAwLCA4LCAwKzEsIDgrMSwgNCwgMTIsIDQrMSwgMTIrMSk7Cit9CisKKy8qIEJpdCBUZXN0ICovCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3R6X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0enBkKChfX3YyZGYpX19hLCAoX192MmRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdGNfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RjcGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0bnpjX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0bnpjcGQoKF9fdjJkZilfX2EsIChfX3YyZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0el9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3R6cHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0Y19wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RjcHMoKF9fdjRzZilfX2EsIChfX3Y0c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0bnpjX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdG56Y3BzKChfX3Y0c2YpX19hLCAoX192NHNmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdGVzdHpfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3R6cGQyNTYoKF9fdjRkZilfX2EsIChfX3Y0ZGYpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0Y19wZChfX20yNTZkIF9fYSwgX19tMjU2ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdGNwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuemNfcGQoX19tMjU2ZCBfX2EsIF9fbTI1NmQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdnRlc3RuemNwZDI1NigoX192NGRmKV9fYSwgKF9fdjRkZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3R6X3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdHpwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RjX3BzKF9fbTI1NiBfX2EsIF9fbTI1NiBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl92dGVzdGNwczI1NigoX192OHNmKV9fYSwgKF9fdjhzZilfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3Rlc3RuemNfcHMoX19tMjU2IF9fYSwgX19tMjU2IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Z0ZXN0bnpjcHMyNTYoKF9fdjhzZilfX2EsIChfX3Y4c2YpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0el9zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdHoyNTYoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0Y19zaTI1NihfX20yNTZpIF9fYSwgX19tMjU2aSBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdGMyNTYoKF9fdjRkaSlfX2EsIChfX3Y0ZGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl90ZXN0bnpjX3NpMjU2KF9fbTI1NmkgX19hLCBfX20yNTZpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0bnpjMjU2KChfX3Y0ZGkpX19hLCAoX192NGRpKV9fYik7Cit9CisKKy8qIFZlY3RvciBleHRyYWN0IHNpZ24gbWFzayAqLworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlbWFza19wZChfX20yNTZkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1za3BkMjU2KChfX3Y0ZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tb3ZlbWFza19wcyhfX20yNTYgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbW92bXNrcHMyNTYoKF9fdjhzZilfX2EpOworfQorCisvKiBWZWN0b3IgX196ZXJvICovCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl96ZXJvYWxsKHZvaWQpCit7CisgIF9fYnVpbHRpbl9pYTMyX3Z6ZXJvYWxsKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3plcm91cHBlcih2b2lkKQoreworICBfX2J1aWx0aW5faWEzMl92emVyb3VwcGVyKCk7Cit9CisKKy8qIFZlY3RvciBsb2FkIHdpdGggYnJvYWRjYXN0ICovCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Jyb2FkY2FzdF9zcyhmbG9hdCBjb25zdCAqX19hKQoreworICBmbG9hdCBfX2YgPSAqX19hOworICByZXR1cm4gKF9fbTEyOCkoX192NHNmKXsgX19mLCBfX2YsIF9fZiwgX19mIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Jyb2FkY2FzdF9zZChkb3VibGUgY29uc3QgKl9fYSkKK3sKKyAgZG91YmxlIF9fZCA9ICpfX2E7CisgIHJldHVybiAoX19tMjU2ZCkoX192NGRmKXsgX19kLCBfX2QsIF9fZCwgX19kIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfYnJvYWRjYXN0X3NzKGZsb2F0IGNvbnN0ICpfX2EpCit7CisgIGZsb2F0IF9fZiA9ICpfX2E7CisgIHJldHVybiAoX19tMjU2KShfX3Y4c2YpeyBfX2YsIF9fZiwgX19mLCBfX2YsIF9fZiwgX19mLCBfX2YsIF9fZiB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RfcGQoX19tMTI4ZCBjb25zdCAqX19hKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmJyb2FkY2FzdGYxMjhfcGQyNTYoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9icm9hZGNhc3RfcHMoX19tMTI4IGNvbnN0ICpfX2EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3Zicm9hZGNhc3RmMTI4X3BzMjU2KF9fYSk7Cit9CisKKy8qIFNJTUQgbG9hZCBvcHMgKi8KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xvYWRfcGQoZG91YmxlIGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAqKF9fbTI1NmQgKilfX3A7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZF9wcyhmbG9hdCBjb25zdCAqX19wKQoreworICByZXR1cm4gKihfX20yNTYgKilfX3A7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xvYWR1X3BkKGRvdWJsZSBjb25zdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9wZCB7CisgICAgX19tMjU2ZCBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICByZXR1cm4gKChzdHJ1Y3QgX19sb2FkdV9wZCopX19wKS0+X192OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xvYWR1X3BzKGZsb2F0IGNvbnN0ICpfX3ApCit7CisgIHN0cnVjdCBfX2xvYWR1X3BzIHsKKyAgICBfX20yNTYgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuICgoc3RydWN0IF9fbG9hZHVfcHMqKV9fcCktPl9fdjsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZF9zaTI1NihfX20yNTZpIGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAqX19wOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkdV9zaTI1NihfX20yNTZpIGNvbnN0ICpfX3ApCit7CisgIHN0cnVjdCBfX2xvYWR1X3NpMjU2IHsKKyAgICBfX20yNTZpIF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3NpMjU2KilfX3ApLT5fX3Y7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2xkZHF1X3NpMjU2KF9fbTI1NmkgY29uc3QgKl9fcCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX2xkZHF1MjU2KChjaGFyIGNvbnN0ICopX19wKTsKK30KKworLyogU0lNRCBzdG9yZSBvcHMgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0b3JlX3BkKGRvdWJsZSAqX19wLCBfX20yNTZkIF9fYSkKK3sKKyAgKihfX20yNTZkICopX19wID0gX19hOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdG9yZV9wcyhmbG9hdCAqX19wLCBfX20yNTYgX19hKQoreworICAqKF9fbTI1NiAqKV9fcCA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1X3BkKGRvdWJsZSAqX19wLCBfX20yNTZkIF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfc3RvcmV1cGQyNTYoX19wLCAoX192NGRmKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0b3JldV9wcyhmbG9hdCAqX19wLCBfX20yNTYgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwczI1NihfX3AsIChfX3Y4c2YpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmVfc2kyNTYoX19tMjU2aSAqX19wLCBfX20yNTZpIF9fYSkKK3sKKyAgKl9fcCA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1X3NpMjU2KF9fbTI1NmkgKl9fcCwgX19tMjU2aSBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1MjU2KChjaGFyICopX19wLCAoX192MzJxaSlfX2EpOworfQorCisvKiBDb25kaXRpb25hbCBsb2FkIG9wcyAqLworc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza2xvYWRfcGQoZG91YmxlIGNvbnN0ICpfX3AsIF9fbTEyOGkgX19tKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbWFza2xvYWRwZCgoY29uc3QgX192MmRmICopX19wLCAoX192MmRpKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21hc2tsb2FkX3BkKGRvdWJsZSBjb25zdCAqX19wLCBfX20yNTZpIF9fbSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcGQyNTYoKGNvbnN0IF9fdjRkZiAqKV9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkaSlfX20pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tsb2FkX3BzKGZsb2F0IGNvbnN0ICpfX3AsIF9fbTEyOGkgX19tKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9tYXNrbG9hZHBzKChjb25zdCBfX3Y0c2YgKilfX3AsIChfX3Y0c2kpX19tKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYXNrbG9hZF9wcyhmbG9hdCBjb25zdCAqX19wLCBfX20yNTZpIF9fbSkKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfbWFza2xvYWRwczI1NigoY29uc3QgX192OHNmICopX19wLCAoX192OHNpKV9fbSk7Cit9CisKKy8qIENvbmRpdGlvbmFsIHN0b3JlIG9wcyAqLworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3N0b3JlX3BzKGZsb2F0ICpfX3AsIF9fbTI1NmkgX19tLCBfX20yNTYgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVwczI1NigoX192OHNmICopX19wLCAoX192OHNpKV9fbSwgKF9fdjhzZilfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrc3RvcmVfcGQoZG91YmxlICpfX3AsIF9fbTEyOGkgX19tLCBfX20xMjhkIF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcGQoKF9fdjJkZiAqKV9fcCwgKF9fdjJkaSlfX20sIChfX3YyZGYpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFza3N0b3JlX3BkKGRvdWJsZSAqX19wLCBfX20yNTZpIF9fbSwgX19tMjU2ZCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZXBkMjU2KChfX3Y0ZGYgKilfX3AsIChfX3Y0ZGkpX19tLCAoX192NGRmKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hc2tzdG9yZV9wcyhmbG9hdCAqX19wLCBfX20xMjhpIF9fbSwgX19tMTI4IF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcHMoKF9fdjRzZiAqKV9fcCwgKF9fdjRzaSlfX20sIChfX3Y0c2YpX19hKTsKK30KKworLyogQ2FjaGVhYmlsaXR5IHN1cHBvcnQgb3BzICovCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdHJlYW1fc2kyNTYoX19tMjU2aSAqX19hLCBfX20yNTZpIF9fYikKK3sKKyAgX19idWlsdGluX2lhMzJfbW92bnRkcTI1NigoX192NGRpICopX19hLCAoX192NGRpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0cmVhbV9wZChkb3VibGUgKl9fYSwgX19tMjU2ZCBfX2IpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdm50cGQyNTYoX19hLCAoX192NGRmKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3N0cmVhbV9wcyhmbG9hdCAqX19wLCBfX20yNTYgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudHBzMjU2KF9fcCwgKF9fdjhzZilfX2EpOworfQorCisvKiBDcmVhdGUgdmVjdG9ycyAqLworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl91bmRlZmluZWRfcGQoKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdW5kZWYyNTYoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3VuZGVmaW5lZF9wcygpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3VuZGVmMjU2KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfdW5kZWZpbmVkX3NpMjU2KCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3VuZGVmMjU2KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9wZChkb3VibGUgX19hLCBkb3VibGUgX19iLCBkb3VibGUgX19jLCBkb3VibGUgX19kKQoreworICByZXR1cm4gKF9fbTI1NmQpeyBfX2QsIF9fYywgX19iLCBfX2EgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfcHMoZmxvYXQgX19hLCBmbG9hdCBfX2IsIGZsb2F0IF9fYywgZmxvYXQgX19kLAorICAgICAgICAgICAgICBmbG9hdCBfX2UsIGZsb2F0IF9fZiwgZmxvYXQgX19nLCBmbG9hdCBfX2gpCit7CisgIHJldHVybiAoX19tMjU2KXsgX19oLCBfX2csIF9fZiwgX19lLCBfX2QsIF9fYywgX19iLCBfX2EgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0X2VwaTMyKGludCBfX2kwLCBpbnQgX19pMSwgaW50IF9faTIsIGludCBfX2kzLAorICAgICAgICAgICAgICAgICBpbnQgX19pNCwgaW50IF9faTUsIGludCBfX2k2LCBpbnQgX19pNykKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3Y4c2kpeyBfX2k3LCBfX2k2LCBfX2k1LCBfX2k0LCBfX2kzLCBfX2kyLCBfX2kxLCBfX2kwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9lcGkxNihzaG9ydCBfX3cxNSwgc2hvcnQgX193MTQsIHNob3J0IF9fdzEzLCBzaG9ydCBfX3cxMiwKKyAgICAgICAgICAgICAgICAgc2hvcnQgX193MTEsIHNob3J0IF9fdzEwLCBzaG9ydCBfX3cwOSwgc2hvcnQgX193MDgsCisgICAgICAgICAgICAgICAgIHNob3J0IF9fdzA3LCBzaG9ydCBfX3cwNiwgc2hvcnQgX193MDUsIHNob3J0IF9fdzA0LAorICAgICAgICAgICAgICAgICBzaG9ydCBfX3cwMywgc2hvcnQgX193MDIsIHNob3J0IF9fdzAxLCBzaG9ydCBfX3cwMCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3YxNmhpKXsgX193MDAsIF9fdzAxLCBfX3cwMiwgX193MDMsIF9fdzA0LCBfX3cwNSwgX193MDYsCisgICAgX193MDcsIF9fdzA4LCBfX3cwOSwgX193MTAsIF9fdzExLCBfX3cxMiwgX193MTMsIF9fdzE0LCBfX3cxNSB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfZXBpOChjaGFyIF9fYjMxLCBjaGFyIF9fYjMwLCBjaGFyIF9fYjI5LCBjaGFyIF9fYjI4LAorICAgICAgICAgICAgICAgIGNoYXIgX19iMjcsIGNoYXIgX19iMjYsIGNoYXIgX19iMjUsIGNoYXIgX19iMjQsCisgICAgICAgICAgICAgICAgY2hhciBfX2IyMywgY2hhciBfX2IyMiwgY2hhciBfX2IyMSwgY2hhciBfX2IyMCwKKyAgICAgICAgICAgICAgICBjaGFyIF9fYjE5LCBjaGFyIF9fYjE4LCBjaGFyIF9fYjE3LCBjaGFyIF9fYjE2LAorICAgICAgICAgICAgICAgIGNoYXIgX19iMTUsIGNoYXIgX19iMTQsIGNoYXIgX19iMTMsIGNoYXIgX19iMTIsCisgICAgICAgICAgICAgICAgY2hhciBfX2IxMSwgY2hhciBfX2IxMCwgY2hhciBfX2IwOSwgY2hhciBfX2IwOCwKKyAgICAgICAgICAgICAgICBjaGFyIF9fYjA3LCBjaGFyIF9fYjA2LCBjaGFyIF9fYjA1LCBjaGFyIF9fYjA0LAorICAgICAgICAgICAgICAgIGNoYXIgX19iMDMsIGNoYXIgX19iMDIsIGNoYXIgX19iMDEsIGNoYXIgX19iMDApCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MzJxaSl7CisgICAgX19iMDAsIF9fYjAxLCBfX2IwMiwgX19iMDMsIF9fYjA0LCBfX2IwNSwgX19iMDYsIF9fYjA3LAorICAgIF9fYjA4LCBfX2IwOSwgX19iMTAsIF9fYjExLCBfX2IxMiwgX19iMTMsIF9fYjE0LCBfX2IxNSwKKyAgICBfX2IxNiwgX19iMTcsIF9fYjE4LCBfX2IxOSwgX19iMjAsIF9fYjIxLCBfX2IyMiwgX19iMjMsCisgICAgX19iMjQsIF9fYjI1LCBfX2IyNiwgX19iMjcsIF9fYjI4LCBfX2IyOSwgX19iMzAsIF9fYjMxCisgIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldF9lcGk2NHgobG9uZyBsb25nIF9fYSwgbG9uZyBsb25nIF9fYiwgbG9uZyBsb25nIF9fYywgbG9uZyBsb25nIF9fZCkKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3Y0ZGkpeyBfX2QsIF9fYywgX19iLCBfX2EgfTsKK30KKworLyogQ3JlYXRlIHZlY3RvcnMgd2l0aCBlbGVtZW50cyBpbiByZXZlcnNlIG9yZGVyICovCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRyX3BkKGRvdWJsZSBfX2EsIGRvdWJsZSBfX2IsIGRvdWJsZSBfX2MsIGRvdWJsZSBfX2QpCit7CisgIHJldHVybiAoX19tMjU2ZCl7IF9fYSwgX19iLCBfX2MsIF9fZCB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfcHMoZmxvYXQgX19hLCBmbG9hdCBfX2IsIGZsb2F0IF9fYywgZmxvYXQgX19kLAorICAgICAgICAgICAgICAgZmxvYXQgX19lLCBmbG9hdCBfX2YsIGZsb2F0IF9fZywgZmxvYXQgX19oKQoreworICByZXR1cm4gKF9fbTI1Nil7IF9fYSwgX19iLCBfX2MsIF9fZCwgX19lLCBfX2YsIF9fZywgX19oIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfZXBpMzIoaW50IF9faTAsIGludCBfX2kxLCBpbnQgX19pMiwgaW50IF9faTMsCisgICAgICAgICAgICAgICAgICBpbnQgX19pNCwgaW50IF9faTUsIGludCBfX2k2LCBpbnQgX19pNykKK3sKKyAgcmV0dXJuIChfX20yNTZpKShfX3Y4c2kpeyBfX2kwLCBfX2kxLCBfX2kyLCBfX2kzLCBfX2k0LCBfX2k1LCBfX2k2LCBfX2k3IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfZXBpMTYoc2hvcnQgX193MTUsIHNob3J0IF9fdzE0LCBzaG9ydCBfX3cxMywgc2hvcnQgX193MTIsCisgICAgICAgc2hvcnQgX193MTEsIHNob3J0IF9fdzEwLCBzaG9ydCBfX3cwOSwgc2hvcnQgX193MDgsCisgICAgICAgc2hvcnQgX193MDcsIHNob3J0IF9fdzA2LCBzaG9ydCBfX3cwNSwgc2hvcnQgX193MDQsCisgICAgICAgc2hvcnQgX193MDMsIHNob3J0IF9fdzAyLCBzaG9ydCBfX3cwMSwgc2hvcnQgX193MDApCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MTZoaSl7IF9fdzE1LCBfX3cxNCwgX193MTMsIF9fdzEyLCBfX3cxMSwgX193MTAsIF9fdzA5LAorICAgIF9fdzA4LCBfX3cwNywgX193MDYsIF9fdzA1LCBfX3cwNCwgX193MDMsIF9fdzAyLCBfX3cwMSwgX193MDAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9lcGk4KGNoYXIgX19iMzEsIGNoYXIgX19iMzAsIGNoYXIgX19iMjksIGNoYXIgX19iMjgsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMjcsIGNoYXIgX19iMjYsIGNoYXIgX19iMjUsIGNoYXIgX19iMjQsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMjMsIGNoYXIgX19iMjIsIGNoYXIgX19iMjEsIGNoYXIgX19iMjAsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMTksIGNoYXIgX19iMTgsIGNoYXIgX19iMTcsIGNoYXIgX19iMTYsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMTUsIGNoYXIgX19iMTQsIGNoYXIgX19iMTMsIGNoYXIgX19iMTIsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMTEsIGNoYXIgX19iMTAsIGNoYXIgX19iMDksIGNoYXIgX19iMDgsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMDcsIGNoYXIgX19iMDYsIGNoYXIgX19iMDUsIGNoYXIgX19iMDQsCisgICAgICAgICAgICAgICAgIGNoYXIgX19iMDMsIGNoYXIgX19iMDIsIGNoYXIgX19iMDEsIGNoYXIgX19iMDApCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MzJxaSl7CisgICAgX19iMzEsIF9fYjMwLCBfX2IyOSwgX19iMjgsIF9fYjI3LCBfX2IyNiwgX19iMjUsIF9fYjI0LAorICAgIF9fYjIzLCBfX2IyMiwgX19iMjEsIF9fYjIwLCBfX2IxOSwgX19iMTgsIF9fYjE3LCBfX2IxNiwKKyAgICBfX2IxNSwgX19iMTQsIF9fYjEzLCBfX2IxMiwgX19iMTEsIF9fYjEwLCBfX2IwOSwgX19iMDgsCisgICAgX19iMDcsIF9fYjA2LCBfX2IwNSwgX19iMDQsIF9fYjAzLCBfX2IwMiwgX19iMDEsIF9fYjAwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldHJfZXBpNjR4KGxvbmcgbG9uZyBfX2EsIGxvbmcgbG9uZyBfX2IsIGxvbmcgbG9uZyBfX2MsIGxvbmcgbG9uZyBfX2QpCit7CisgIHJldHVybiAoX19tMjU2aSkoX192NGRpKXsgX19hLCBfX2IsIF9fYywgX19kIH07Cit9CisKKy8qIENyZWF0ZSB2ZWN0b3JzIHdpdGggcmVwZWF0ZWQgZWxlbWVudHMgKi8KK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldDFfcGQoZG91YmxlIF9fdykKK3sKKyAgcmV0dXJuIChfX20yNTZkKXsgX193LCBfX3csIF9fdywgX193IH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0MV9wcyhmbG9hdCBfX3cpCit7CisgIHJldHVybiAoX19tMjU2KXsgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3cgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0MV9lcGkzMihpbnQgX19pKQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjhzaSl7IF9faSwgX19pLCBfX2ksIF9faSwgX19pLCBfX2ksIF9faSwgX19pIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X3NldDFfZXBpMTYoc2hvcnQgX193KQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjE2aGkpeyBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3csCisgICAgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdyB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXQxX2VwaTgoY2hhciBfX2IpCit7CisgIHJldHVybiAoX19tMjU2aSkoX192MzJxaSl7IF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwKKyAgICBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLAorICAgIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiB9OworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXQxX2VwaTY0eChsb25nIGxvbmcgX19xKQoreworICByZXR1cm4gKF9fbTI1NmkpKF9fdjRkaSl7IF9fcSwgX19xLCBfX3EsIF9fcSB9OworfQorCisvKiBDcmVhdGUgX196ZXJvZWQgdmVjdG9ycyAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0emVyb19wZCh2b2lkKQoreworICByZXR1cm4gKF9fbTI1NmQpeyAwLCAwLCAwLCAwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0emVyb19wcyh2b2lkKQoreworICByZXR1cm4gKF9fbTI1Nil7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0emVyb19zaTI1Nih2b2lkKQoreworICByZXR1cm4gKF9fbTI1NmkpeyAwTEwsIDBMTCwgMExMLCAwTEwgfTsKK30KKworLyogQ2FzdCBiZXR3ZWVuIHZlY3RvciB0eXBlcyAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cGRfcHMoX19tMjU2ZCBfX2EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHBkX3NpMjU2KF9fbTI1NmQgX19hKQoreworICByZXR1cm4gKF9fbTI1NmkpX19hOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0cHNfcGQoX19tMjU2IF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHBzX3NpMjU2KF9fbTI1NiBfX2EpCit7CisgIHJldHVybiAoX19tMjU2aSlfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHNpMjU2X3BzKF9fbTI1NmkgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RzaTI1Nl9wZChfX20yNTZpIF9fYSkKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHBkMjU2X3BkMTI4KF9fbTI1NmQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RwczI1Nl9wczEyOChfX20yNTYgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDEsIDIsIDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9jYXN0c2kyNTZfc2kxMjgoX19tMjU2aSBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RwZDEyOF9wZDI1NihfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAxLCAtMSwgLTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Nhc3RwczEyOF9wczI1NihfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfY2FzdHNpMTI4X3NpMjU2KF9fbTEyOGkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDEsIC0xLCAtMSk7Cit9CisKKy8qCisgICBWZWN0b3IgaW5zZXJ0LgorICAgV2UgdXNlIG1hY3JvcyByYXRoZXIgdGhhbiBpbmxpbmVzIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGFjY2VwdAorICAgaW52b2NhdGlvbnMgd2hlcmUgdGhlIGltbWVkaWF0ZSBNIGlzIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4KKyovCisjZGVmaW5lIF9tbTI1Nl9pbnNlcnRmMTI4X3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKKyAgICAoX192OHNmKShfX20yNTYpKFYxKSwgXAorICAgIChfX3Y4c2YpX21tMjU2X2Nhc3RwczEyOF9wczI1NigoX19tMTI4KShWMikpLCBcCisgICAgKCgoTSkgJiAxKSA/ICAwIDogIDgpLCBcCisgICAgKCgoTSkgJiAxKSA/ICAxIDogIDkpLCBcCisgICAgKCgoTSkgJiAxKSA/ICAyIDogMTApLCBcCisgICAgKCgoTSkgJiAxKSA/ICAzIDogMTEpLCBcCisgICAgKCgoTSkgJiAxKSA/ICA4IDogIDQpLCBcCisgICAgKCgoTSkgJiAxKSA/ICA5IDogIDUpLCBcCisgICAgKCgoTSkgJiAxKSA/IDEwIDogIDYpLCBcCisgICAgKCgoTSkgJiAxKSA/IDExIDogIDcpICk7fSkKKworI2RlZmluZSBfbW0yNTZfaW5zZXJ0ZjEyOF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvciggXAorICAgIChfX3Y0ZGYpKF9fbTI1NmQpKFYxKSwgXAorICAgIChfX3Y0ZGYpX21tMjU2X2Nhc3RwZDEyOF9wZDI1NigoX19tMTI4ZCkoVjIpKSwgXAorICAgICgoKE0pICYgMSkgPyAwIDogNCksIFwKKyAgICAoKChNKSAmIDEpID8gMSA6IDUpLCBcCisgICAgKCgoTSkgJiAxKSA/IDQgOiAyKSwgXAorICAgICgoKE0pICYgMSkgPyA1IDogMykgKTt9KQorCisjZGVmaW5lIF9tbTI1Nl9pbnNlcnRmMTI4X3NpMjU2KFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTZpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBcCisgICAgKF9fdjRkaSkoX19tMjU2aSkoVjEpLCBcCisgICAgKF9fdjRkaSlfbW0yNTZfY2FzdHNpMTI4X3NpMjU2KChfX20xMjhpKShWMikpLCBcCisgICAgKCgoTSkgJiAxKSA/IDAgOiA0KSwgXAorICAgICgoKE0pICYgMSkgPyAxIDogNSksIFwKKyAgICAoKChNKSAmIDEpID8gNCA6IDIpLCBcCisgICAgKCgoTSkgJiAxKSA/IDUgOiAzKSApO30pCisKKy8qCisgICBWZWN0b3IgZXh0cmFjdC4KKyAgIFdlIHVzZSBtYWNyb3MgcmF0aGVyIHRoYW4gaW5saW5lcyBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBhY2NlcHQKKyAgIGludm9jYXRpb25zIHdoZXJlIHRoZSBpbW1lZGlhdGUgTSBpcyBhIGNvbnN0YW50IGV4cHJlc3Npb24uCisqLworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGYxMjhfcHMoViwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoIFwKKyAgICAoX192OHNmKShfX20yNTYpKFYpLCBcCisgICAgKF9fdjhzZikoX21tMjU2X3NldHplcm9fcHMoKSksIFwKKyAgICAoKChNKSAmIDEpID8gNCA6IDApLCBcCisgICAgKCgoTSkgJiAxKSA/IDUgOiAxKSwgXAorICAgICgoKE0pICYgMSkgPyA2IDogMiksIFwKKyAgICAoKChNKSAmIDEpID8gNyA6IDMpICk7fSkKKworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGYxMjhfcGQoViwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBcCisgICAgKF9fdjRkZikoX19tMjU2ZCkoViksIFwKKyAgICAoX192NGRmKShfbW0yNTZfc2V0emVyb19wZCgpKSwgXAorICAgICgoKE0pICYgMSkgPyAyIDogMCksIFwKKyAgICAoKChNKSAmIDEpID8gMyA6IDEpICk7fSkKKworI2RlZmluZSBfbW0yNTZfZXh0cmFjdGYxMjhfc2kyNTYoViwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKCBcCisgICAgKF9fdjRkaSkoX19tMjU2aSkoViksIFwKKyAgICAoX192NGRpKShfbW0yNTZfc2V0emVyb19zaTI1NigpKSwgXAorICAgICgoKE0pICYgMSkgPyAyIDogMCksIFwKKyAgICAoKChNKSAmIDEpID8gMyA6IDEpICk7fSkKKworLyogU0lNRCBsb2FkIG9wcyAodW5hbGlnbmVkKSAqLworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9sb2FkdTJfbTEyOChmbG9hdCBjb25zdCAqX19hZGRyX2hpLCBmbG9hdCBjb25zdCAqX19hZGRyX2xvKQoreworICBzdHJ1Y3QgX19sb2FkdV9wcyB7CisgICAgX19tMTI4IF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisKKyAgX19tMjU2IF9fdjI1NiA9IF9tbTI1Nl9jYXN0cHMxMjhfcHMyNTYoKChzdHJ1Y3QgX19sb2FkdV9wcyopX19hZGRyX2xvKS0+X192KTsKKyAgcmV0dXJuIF9tbTI1Nl9pbnNlcnRmMTI4X3BzKF9fdjI1NiwgKChzdHJ1Y3QgX19sb2FkdV9wcyopX19hZGRyX2hpKS0+X192LCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZHUyX20xMjhkKGRvdWJsZSBjb25zdCAqX19hZGRyX2hpLCBkb3VibGUgY29uc3QgKl9fYWRkcl9sbykKK3sKKyAgc3RydWN0IF9fbG9hZHVfcGQgeworICAgIF9fbTEyOGQgX192OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKworICBfX20yNTZkIF9fdjI1NiA9IF9tbTI1Nl9jYXN0cGQxMjhfcGQyNTYoKChzdHJ1Y3QgX19sb2FkdV9wZCopX19hZGRyX2xvKS0+X192KTsKKyAgcmV0dXJuIF9tbTI1Nl9pbnNlcnRmMTI4X3BkKF9fdjI1NiwgKChzdHJ1Y3QgX19sb2FkdV9wZCopX19hZGRyX2hpKS0+X192LCAxKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbG9hZHUyX20xMjhpKF9fbTEyOGkgY29uc3QgKl9fYWRkcl9oaSwgX19tMTI4aSBjb25zdCAqX19hZGRyX2xvKQoreworICBzdHJ1Y3QgX19sb2FkdV9zaTEyOCB7CisgICAgX19tMTI4aSBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBfX20yNTZpIF9fdjI1NiA9IF9tbTI1Nl9jYXN0c2kxMjhfc2kyNTYoCisgICAgKChzdHJ1Y3QgX19sb2FkdV9zaTEyOCopX19hZGRyX2xvKS0+X192KTsKKyAgcmV0dXJuIF9tbTI1Nl9pbnNlcnRmMTI4X3NpMjU2KF9fdjI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IF9fbG9hZHVfc2kxMjgqKV9fYWRkcl9oaSktPl9fdiwgMSk7Cit9CisKKy8qIFNJTUQgc3RvcmUgb3BzICh1bmFsaWduZWQpICovCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zdG9yZXUyX20xMjgoZmxvYXQgKl9fYWRkcl9oaSwgZmxvYXQgKl9fYWRkcl9sbywgX19tMjU2IF9fYSkKK3sKKyAgX19tMTI4IF9fdjEyODsKKworICBfX3YxMjggPSBfbW0yNTZfY2FzdHBzMjU2X3BzMTI4KF9fYSk7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzKF9fYWRkcl9sbywgX192MTI4KTsKKyAgX192MTI4ID0gX21tMjU2X2V4dHJhY3RmMTI4X3BzKF9fYSwgMSk7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBzKF9fYWRkcl9oaSwgX192MTI4KTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1Ml9tMTI4ZChkb3VibGUgKl9fYWRkcl9oaSwgZG91YmxlICpfX2FkZHJfbG8sIF9fbTI1NmQgX19hKQoreworICBfX20xMjhkIF9fdjEyODsKKworICBfX3YxMjggPSBfbW0yNTZfY2FzdHBkMjU2X3BkMTI4KF9fYSk7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBkKF9fYWRkcl9sbywgX192MTI4KTsKKyAgX192MTI4ID0gX21tMjU2X2V4dHJhY3RmMTI4X3BkKF9fYSwgMSk7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBkKF9fYWRkcl9oaSwgX192MTI4KTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc3RvcmV1Ml9tMTI4aShfX20xMjhpICpfX2FkZHJfaGksIF9fbTEyOGkgKl9fYWRkcl9sbywgX19tMjU2aSBfX2EpCit7CisgIF9fbTEyOGkgX192MTI4OworCisgIF9fdjEyOCA9IF9tbTI1Nl9jYXN0c2kyNTZfc2kxMjgoX19hKTsKKyAgX19idWlsdGluX2lhMzJfc3RvcmVkcXUoKGNoYXIgKilfX2FkZHJfbG8sIChfX3YxNnFpKV9fdjEyOCk7CisgIF9fdjEyOCA9IF9tbTI1Nl9leHRyYWN0ZjEyOF9zaTI1NihfX2EsIDEpOworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdSgoY2hhciAqKV9fYWRkcl9oaSwgKF9fdjE2cWkpX192MTI4KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRfbTEyOCAoX19tMTI4IF9faGksIF9fbTEyOCBfX2xvKSB7CisgIHJldHVybiAoX19tMjU2KSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2xvLCBfX2hpLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3KTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0X20xMjhkIChfX20xMjhkIF9faGksIF9fbTEyOGQgX19sbykgeworICByZXR1cm4gKF9fbTI1NmQpX21tMjU2X3NldF9tMTI4KChfX20xMjgpX19oaSwgKF9fbTEyOClfX2xvKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0X20xMjhpIChfX20xMjhpIF9faGksIF9fbTEyOGkgX19sbykgeworICByZXR1cm4gKF9fbTI1NmkpX21tMjU2X3NldF9tMTI4KChfX20xMjgpX19oaSwgKF9fbTEyOClfX2xvKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRyX20xMjggKF9fbTEyOCBfX2xvLCBfX20xMjggX19oaSkgeworICByZXR1cm4gX21tMjU2X3NldF9tMTI4KF9faGksIF9fbG8pOworfQorCitzdGF0aWMgX19pbmxpbmUgX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9zZXRyX20xMjhkIChfX20xMjhkIF9fbG8sIF9fbTEyOGQgX19oaSkgeworICByZXR1cm4gKF9fbTI1NmQpX21tMjU2X3NldF9tMTI4KChfX20xMjgpX19oaSwgKF9fbTEyOClfX2xvKTsKK30KKworc3RhdGljIF9faW5saW5lIF9fbTI1NmkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfc2V0cl9tMTI4aSAoX19tMTI4aSBfX2xvLCBfX20xMjhpIF9faGkpIHsKKyAgcmV0dXJuIChfX20yNTZpKV9tbTI1Nl9zZXRfbTEyOCgoX19tMTI4KV9faGksIChfX20xMjgpX19sbyk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fQVZYSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYm1pMmludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ibWkyaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhZTgyYwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYm1pMmludHJpbi5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qPT09LS0tLSBibWkyaW50cmluLmggLSBCTUkyIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZiAhZGVmaW5lZCBfX1g4NklOVFJJTl9IICYmICFkZWZpbmVkIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxibWkyaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0JNSTJJTlRSSU5fSAorI2RlZmluZSBfX0JNSTJJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImJtaTIiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19iemhpX3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfYnpoaV9zaShfX1gsIF9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19wZGVwX3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcGRlcF9zaShfX1gsIF9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19wZXh0X3UzMih1bnNpZ25lZCBpbnQgX19YLCB1bnNpZ25lZCBpbnQgX19ZKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcGV4dF9zaShfX1gsIF9fWSk7Cit9CisKKyNpZmRlZiAgX194ODZfNjRfXworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfYnpoaV91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2J6aGlfZGkoX19YLCBfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfcGRlcF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BkZXBfZGkoX19YLCBfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfcGV4dF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BleHRfZGkoX19YLCBfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbXVseF91NjQgKHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX1ksCisJICAgdW5zaWduZWQgbG9uZyBsb25nICpfX1ApCit7CisgIHVuc2lnbmVkIF9faW50MTI4IF9fcmVzID0gKHVuc2lnbmVkIF9faW50MTI4KSBfX1ggKiBfX1k7CisgICpfX1AgPSAodW5zaWduZWQgbG9uZyBsb25nKSAoX19yZXMgPj4gNjQpOworICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykgX19yZXM7Cit9CisKKyNlbHNlIC8qICFfX3g4Nl82NF9fICovCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tdWx4X3UzMiAodW5zaWduZWQgaW50IF9fWCwgdW5zaWduZWQgaW50IF9fWSwgdW5zaWduZWQgaW50ICpfX1ApCit7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIF9fWCAqIF9fWTsKKyAgKl9fUCA9ICh1bnNpZ25lZCBpbnQpIChfX3JlcyA+PiAzMik7CisgIHJldHVybiAodW5zaWduZWQgaW50KSBfX3JlczsKK30KKworI2VuZGlmIC8qICFfX3g4Nl82NF9fICAqLworCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0JNSTJJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ibWlpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYm1paW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5ODc5MgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvYm1paW50cmluLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qPT09LS0tLSBibWlpbnRyaW4uaCAtIEJNSSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZiAhZGVmaW5lZCBfX1g4NklOVFJJTl9IICYmICFkZWZpbmVkIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxibWlpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fQk1JSU5UUklOX0gKKyNkZWZpbmUgX19CTUlJTlRSSU5fSAorCisjZGVmaW5lIF90emNudF91MTYoYSkgICAgIChfX3R6Y250X3UxNigoYSkpKQorI2RlZmluZSBfYW5kbl91MzIoYSwgYikgICAoX19hbmRuX3UzMigoYSksIChiKSkpCisvKiBfYmV4dHJfdTMyICE9IF9fYmV4dHJfdTMyICovCisjZGVmaW5lIF9ibHNpX3UzMihhKSAgICAgIChfX2Jsc2lfdTMyKChhKSkpCisjZGVmaW5lIF9ibHNtc2tfdTMyKGEpICAgIChfX2Jsc21za191MzIoKGEpKSkKKyNkZWZpbmUgX2Jsc3JfdTMyKGEpICAgICAgKF9fYmxzcl91MzIoKGEpKSkKKyNkZWZpbmUgX3R6Y250X3UzMihhKSAgICAgKF9fdHpjbnRfdTMyKChhKSkpCisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiYm1pIikpKQorCisvKiBBbGxvdyB1c2luZyB0aGUgdHpjbnQgaW50cmluc2ljcyBldmVuIGZvciBub24tQk1JIHRhcmdldHMuIFNpbmNlIHRoZSBUWkNOVAorICAgaW5zdHJ1Y3Rpb24gYmVoYXZlcyBhcyBCU0Ygb24gbm9uLUJNSSB0YXJnZXRzLCB0aGVyZSBpcyBjb2RlIHRoYXQgZXhwZWN0cworICAgdG8gdXNlIGl0IGFzIGEgcG90ZW50aWFsbHkgZmFzdGVyIHZlcnNpb24gb2YgQlNGLiAqLworI2RlZmluZSBfX1JFTEFYRURfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgX19SRUxBWEVEX0ZOX0FUVFJTCitfX3R6Y250X3UxNih1bnNpZ25lZCBzaG9ydCBfX1gpCit7CisgIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY3R6cyhfX1gpIDogMTY7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYW5kbl91MzIodW5zaWduZWQgaW50IF9fWCwgdW5zaWduZWQgaW50IF9fWSkKK3sKKyAgcmV0dXJuIH5fX1ggJiBfX1k7Cit9CisKKy8qIEFNRC1zcGVjaWZpZWQsIGRvdWJsZS1sZWFkaW5nLXVuZGVyc2NvcmUgdmVyc2lvbiBvZiBCRVhUUiAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19iZXh0cl91MzIodW5zaWduZWQgaW50IF9fWCwgdW5zaWduZWQgaW50IF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2JleHRyX3UzMihfX1gsIF9fWSk7Cit9CisKKy8qIEludGVsLXNwZWNpZmllZCwgc2luZ2xlLWxlYWRpbmctdW5kZXJzY29yZSB2ZXJzaW9uIG9mIEJFWFRSICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfYmV4dHJfdTMyKHVuc2lnbmVkIGludCBfX1gsIHVuc2lnbmVkIGludCBfX1ksIHVuc2lnbmVkIGludCBfX1opCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9iZXh0cl91MzIgKF9fWCwgKChfX1kgJiAweGZmKSB8ICgoX19aICYgMHhmZikgPDwgOCkpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNpX3UzMih1bnNpZ25lZCBpbnQgX19YKQoreworICByZXR1cm4gX19YICYgLV9fWDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNtc2tfdTMyKHVuc2lnbmVkIGludCBfX1gpCit7CisgIHJldHVybiBfX1ggXiAoX19YIC0gMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzcl91MzIodW5zaWduZWQgaW50IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCAmIChfX1ggLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fUkVMQVhFRF9GTl9BVFRSUworX190emNudF91MzIodW5zaWduZWQgaW50IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jdHooX19YKSA6IDMyOworfQorCisjaWZkZWYgX194ODZfNjRfXworCisjZGVmaW5lIF9hbmRuX3U2NChhLCBiKSAgIChfX2FuZG5fdTY0KChhKSwgKGIpKSkKKy8qIF9iZXh0cl91NjQgIT0gX19iZXh0cl91NjQgKi8KKyNkZWZpbmUgX2Jsc2lfdTY0KGEpICAgICAgKF9fYmxzaV91NjQoKGEpKSkKKyNkZWZpbmUgX2Jsc21za191NjQoYSkgICAgKF9fYmxzbXNrX3U2NCgoYSkpKQorI2RlZmluZSBfYmxzcl91NjQoYSkgICAgICAoX19ibHNyX3U2NCgoYSkpKQorI2RlZmluZSBfdHpjbnRfdTY0KGEpICAgICAoX190emNudF91NjQoKGEpKSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19hbmRuX3U2NCAodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKK3sKKyAgcmV0dXJuIH5fX1ggJiBfX1k7Cit9CisKKy8qIEFNRC1zcGVjaWZpZWQsIGRvdWJsZS1sZWFkaW5nLXVuZGVyc2NvcmUgdmVyc2lvbiBvZiBCRVhUUiAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19iZXh0cl91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCwgdW5zaWduZWQgbG9uZyBsb25nIF9fWSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2JleHRyX3U2NChfX1gsIF9fWSk7Cit9CisKKy8qIEludGVsLXNwZWNpZmllZCwgc2luZ2xlLWxlYWRpbmctdW5kZXJzY29yZSB2ZXJzaW9uIG9mIEJFWFRSICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfYmV4dHJfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gsIHVuc2lnbmVkIGludCBfX1ksIHVuc2lnbmVkIGludCBfX1opCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9iZXh0cl91NjQgKF9fWCwgKChfX1kgJiAweGZmKSB8ICgoX19aICYgMHhmZikgPDwgOCkpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNpX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19YKQoreworICByZXR1cm4gX19YICYgLV9fWDsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNtc2tfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1gpCit7CisgIHJldHVybiBfX1ggXiAoX19YIC0gMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxzcl91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCAmIChfX1ggLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fUkVMQVhFRF9GTl9BVFRSUworX190emNudF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jdHpsbChfX1gpIDogNjQ7Cit9CisKKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKyN1bmRlZiBfX1JFTEFYRURfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fQk1JSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvY3B1aWQuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvY3B1aWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGEwMmUwCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jcHVpZC5oCkBAIC0wLDAgKzEsMjA5IEBACisvKj09PS0tLS0gY3B1aWQuaCAtIFg4NiBjcHUgbW9kZWwgZGV0ZWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgIShfX3g4Nl82NF9fIHx8IF9faTM4Nl9fKQorI2Vycm9yIHRoaXMgaGVhZGVyIGlzIGZvciB4ODYgb25seQorI2VuZGlmCisKKy8qIFJlc3BvbnNlcyBpZGVudGlmaWNhdGlvbiByZXF1ZXN0IHdpdGggJWVheCAwICovCisvKiBBTUQ6ICAgICAiQXV0aGVudGljQU1EIiAqLworI2RlZmluZSBzaWduYXR1cmVfQU1EX2VieCAweDY4NzQ3NTQxCisjZGVmaW5lIHNpZ25hdHVyZV9BTURfZWR4IDB4Njk3NDZlNjUKKyNkZWZpbmUgc2lnbmF0dXJlX0FNRF9lY3ggMHg0NDRkNDE2MworLyogQ0VOVEFVUjogIkNlbnRhdXJIYXVscyIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX0NFTlRBVVJfZWJ4IDB4NzQ2ZTY1NDMKKyNkZWZpbmUgc2lnbmF0dXJlX0NFTlRBVVJfZWR4IDB4NDg3Mjc1NjEKKyNkZWZpbmUgc2lnbmF0dXJlX0NFTlRBVVJfZWN4IDB4NzM2Yzc1NjEKKy8qIENZUklYOiAgICJDeXJpeEluc3RlYWQiICovCisjZGVmaW5lIHNpZ25hdHVyZV9DWVJJWF9lYnggMHg2OTcyNzk0MworI2RlZmluZSBzaWduYXR1cmVfQ1lSSVhfZWR4IDB4NzM2ZTQ5NzgKKyNkZWZpbmUgc2lnbmF0dXJlX0NZUklYX2VjeCAweDY0NjE2NTc0CisvKiBJTlRFTDogICAiR2VudWluZUludGVsIiAqLworI2RlZmluZSBzaWduYXR1cmVfSU5URUxfZWJ4IDB4NzU2ZTY1NDcKKyNkZWZpbmUgc2lnbmF0dXJlX0lOVEVMX2VkeCAweDQ5NjU2ZTY5CisjZGVmaW5lIHNpZ25hdHVyZV9JTlRFTF9lY3ggMHg2YzY1NzQ2ZQorLyogVE0xOiAgICAgIlRyYW5zbWV0YUNQVSIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX1RNMV9lYnggMHg2ZTYxNzI1NAorI2RlZmluZSBzaWduYXR1cmVfVE0xX2VkeCAweDc0NjU2ZDczCisjZGVmaW5lIHNpZ25hdHVyZV9UTTFfZWN4IDB4NTU1MDQzNjEKKy8qIFRNMjogICAgICJHZW51aW5lVE14ODYiICovCisjZGVmaW5lIHNpZ25hdHVyZV9UTTJfZWJ4IDB4NzU2ZTY1NDcKKyNkZWZpbmUgc2lnbmF0dXJlX1RNMl9lZHggMHg1NDY1NmU2OQorI2RlZmluZSBzaWduYXR1cmVfVE0yX2VjeCAweDM2Mzg3ODRkCisvKiBOU0M6ICAgICAiR2VvZGUgYnkgTlNDIiAqLworI2RlZmluZSBzaWduYXR1cmVfTlNDX2VieCAweDY0NmY2NTQ3CisjZGVmaW5lIHNpZ25hdHVyZV9OU0NfZWR4IDB4NDM1MzRlMjAKKyNkZWZpbmUgc2lnbmF0dXJlX05TQ19lY3ggMHg3OTYyMjA2NQorLyogTkVYR0VOOiAgIk5leEdlbkRyaXZlbiIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX05FWEdFTl9lYnggMHg0Nzc4NjU0ZQorI2RlZmluZSBzaWduYXR1cmVfTkVYR0VOX2VkeCAweDcyNDQ2ZTY1CisjZGVmaW5lIHNpZ25hdHVyZV9ORVhHRU5fZWN4IDB4NmU2NTc2NjkKKy8qIFJJU0U6ICAgICJSaXNlUmlzZVJpc2UiICovCisjZGVmaW5lIHNpZ25hdHVyZV9SSVNFX2VieCAweDY1NzM2OTUyCisjZGVmaW5lIHNpZ25hdHVyZV9SSVNFX2VkeCAweDY1NzM2OTUyCisjZGVmaW5lIHNpZ25hdHVyZV9SSVNFX2VjeCAweDY1NzM2OTUyCisvKiBTSVM6ICAgICAiU2lTIFNpUyBTaVMgIiAqLworI2RlZmluZSBzaWduYXR1cmVfU0lTX2VieCAweDIwNTM2OTUzCisjZGVmaW5lIHNpZ25hdHVyZV9TSVNfZWR4IDB4MjA1MzY5NTMKKyNkZWZpbmUgc2lnbmF0dXJlX1NJU19lY3ggMHgyMDUzNjk1MworLyogVU1DOiAgICAgIlVNQyBVTUMgVU1DICIgKi8KKyNkZWZpbmUgc2lnbmF0dXJlX1VNQ19lYnggMHgyMDQzNGQ1NQorI2RlZmluZSBzaWduYXR1cmVfVU1DX2VkeCAweDIwNDM0ZDU1CisjZGVmaW5lIHNpZ25hdHVyZV9VTUNfZWN4IDB4MjA0MzRkNTUKKy8qIFZJQTogICAgICJWSUEgVklBIFZJQSAiICovCisjZGVmaW5lIHNpZ25hdHVyZV9WSUFfZWJ4IDB4MjA0MTQ5NTYKKyNkZWZpbmUgc2lnbmF0dXJlX1ZJQV9lZHggMHgyMDQxNDk1NgorI2RlZmluZSBzaWduYXR1cmVfVklBX2VjeCAweDIwNDE0OTU2CisvKiBWT1JURVg6ICAiVm9ydGV4ODYgU29DIiAqLworI2RlZmluZSBzaWduYXR1cmVfVk9SVEVYX2VieCAweDc0NzI2ZjU2CisjZGVmaW5lIHNpZ25hdHVyZV9WT1JURVhfZWR4IDB4MzYzODc4NjUKKyNkZWZpbmUgc2lnbmF0dXJlX1ZPUlRFWF9lY3ggMHg0MzZmNTMyMAorCisvKiBGZWF0dXJlcyBpbiAlZWN4IGZvciBsZXZlbCAxICovCisjZGVmaW5lIGJpdF9TU0UzICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIGJpdF9QQ0xNVUxRRFEgICAweDAwMDAwMDAyCisjZGVmaW5lIGJpdF9EVEVTNjQgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIGJpdF9NT05JVE9SICAgICAweDAwMDAwMDA4CisjZGVmaW5lIGJpdF9EU0NQTCAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIGJpdF9WTVggICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIGJpdF9TTVggICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIGJpdF9FSVNUICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIGJpdF9UTTIgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIGJpdF9TU1NFMyAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIGJpdF9DTlhUSUQgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIGJpdF9GTUEgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIGJpdF9DTVBYQ0hHMTZCICAweDAwMDAyMDAwCisjZGVmaW5lIGJpdF94VFBSICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIGJpdF9QRENNICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIGJpdF9QQ0lEICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIGJpdF9EQ0EgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIGJpdF9TU0U0MSAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIGJpdF9TU0U0MiAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIGJpdF94MkFQSUMgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIGJpdF9NT1ZCRSAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIGJpdF9QT1BDTlQgICAgICAweDAwODAwMDAwCisjZGVmaW5lIGJpdF9UU0NEZWFkbGluZSAweDAxMDAwMDAwCisjZGVmaW5lIGJpdF9BRVNOSSAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIGJpdF9YU0FWRSAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIGJpdF9PU1hTQVZFICAgICAweDA4MDAwMDAwCisjZGVmaW5lIGJpdF9BVlggICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIGJpdF9SRFJORCAgICAgICAweDQwMDAwMDAwCisKKy8qIEZlYXR1cmVzIGluICVlZHggZm9yIGxldmVsIDEgKi8KKyNkZWZpbmUgYml0X0ZQVSAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgYml0X1ZNRSAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgYml0X0RFICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgYml0X1BTRSAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgYml0X1RTQyAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgYml0X01TUiAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgYml0X1BBRSAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgYml0X01DRSAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgYml0X0NYOCAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgYml0X0FQSUMgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgYml0X1NFUCAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgYml0X01UUlIgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgYml0X1BHRSAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgYml0X01DQSAgICAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgYml0X0NNT1YgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgYml0X1BBVCAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgYml0X1BTRTM2ICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgYml0X1BTTiAgICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgYml0X0NMRlNIICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgYml0X0RTICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgYml0X0FDUEkgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgYml0X01NWCAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgYml0X0ZYU1IgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgYml0X0ZYU0FWRSAgICAgIGJpdF9GWFNSICAgIC8qIGZvciBnY2MgY29tcGF0ICovCisjZGVmaW5lIGJpdF9TU0UgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIGJpdF9TU0UyICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIGJpdF9TUyAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIGJpdF9IVFQgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIGJpdF9UTSAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIGJpdF9QQkUgICAgICAgICAweDgwMDAwMDAwCisKKy8qIEZlYXR1cmVzIGluICVlYnggZm9yIGxldmVsIDcgc3ViLWxlYWYgMCAqLworI2RlZmluZSBiaXRfRlNHU0JBU0UgICAgMHgwMDAwMDAwMQorI2RlZmluZSBiaXRfU01FUCAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBiaXRfRU5IX01PVlNCICAgMHgwMDAwMDIwMAorCisjaWYgX19pMzg2X18KKyNkZWZpbmUgX19jcHVpZChfX2xldmVsLCBfX2VheCwgX19lYngsIF9fZWN4LCBfX2VkeCkgXAorICAgIF9fYXNtKCJjcHVpZCIgOiAiPWEiKF9fZWF4KSwgIj1iIiAoX19lYngpLCAiPWMiKF9fZWN4KSwgIj1kIihfX2VkeCkgXAorICAgICAgICAgICAgICAgICAgOiAiMCIoX19sZXZlbCkpCisKKyNkZWZpbmUgX19jcHVpZF9jb3VudChfX2xldmVsLCBfX2NvdW50LCBfX2VheCwgX19lYngsIF9fZWN4LCBfX2VkeCkgXAorICAgIF9fYXNtKCJjcHVpZCIgOiAiPWEiKF9fZWF4KSwgIj1iIiAoX19lYngpLCAiPWMiKF9fZWN4KSwgIj1kIihfX2VkeCkgXAorICAgICAgICAgICAgICAgICAgOiAiMCIoX19sZXZlbCksICIyIihfX2NvdW50KSkKKyNlbHNlCisvKiB4ODYtNjQgdXNlcyAlcmJ4IGFzIHRoZSBiYXNlIHJlZ2lzdGVyLCBzbyBwcmVzZXJ2ZSBpdC4gKi8KKyNkZWZpbmUgX19jcHVpZChfX2xldmVsLCBfX2VheCwgX19lYngsIF9fZWN4LCBfX2VkeCkgXAorICAgIF9fYXNtKCIgIHhjaGdxICAlJXJieCwlcTFcbiIgXAorICAgICAgICAgICIgIGNwdWlkXG4iIFwKKyAgICAgICAgICAiICB4Y2hncSAgJSVyYngsJXExIiBcCisgICAgICAgIDogIj1hIihfX2VheCksICI9ciIgKF9fZWJ4KSwgIj1jIihfX2VjeCksICI9ZCIoX19lZHgpIFwKKyAgICAgICAgOiAiMCIoX19sZXZlbCkpCisKKyNkZWZpbmUgX19jcHVpZF9jb3VudChfX2xldmVsLCBfX2NvdW50LCBfX2VheCwgX19lYngsIF9fZWN4LCBfX2VkeCkgXAorICAgIF9fYXNtKCIgIHhjaGdxICAlJXJieCwlcTFcbiIgXAorICAgICAgICAgICIgIGNwdWlkXG4iIFwKKyAgICAgICAgICAiICB4Y2hncSAgJSVyYngsJXExIiBcCisgICAgICAgIDogIj1hIihfX2VheCksICI9ciIgKF9fZWJ4KSwgIj1jIihfX2VjeCksICI9ZCIoX19lZHgpIFwKKyAgICAgICAgOiAiMCIoX19sZXZlbCksICIyIihfX2NvdW50KSkKKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fZ2V0X2NwdWlkICh1bnNpZ25lZCBpbnQgX19sZXZlbCwgdW5zaWduZWQgaW50ICpfX2VheCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19lYngsIHVuc2lnbmVkIGludCAqX19lY3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKl9fZWR4KSB7CisgICAgX19jcHVpZChfX2xldmVsLCAqX19lYXgsICpfX2VieCwgKl9fZWN4LCAqX19lZHgpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fZ2V0X2NwdWlkX21heCAodW5zaWduZWQgaW50IF9fbGV2ZWwsIHVuc2lnbmVkIGludCAqX19zaWcpCit7CisgICAgdW5zaWduZWQgaW50IF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4OworI2lmIF9faTM4Nl9fCisgICAgaW50IF9fY3B1aWRfc3VwcG9ydGVkOworCisgICAgX19hc20oIiAgcHVzaGZsXG4iCisgICAgICAgICAgIiAgcG9wbCAgICUlZWF4XG4iCisgICAgICAgICAgIiAgbW92bCAgICUlZWF4LCUlZWN4XG4iCisgICAgICAgICAgIiAgeG9ybCAgICQweDAwMjAwMDAwLCUlZWF4XG4iCisgICAgICAgICAgIiAgcHVzaGwgICUlZWF4XG4iCisgICAgICAgICAgIiAgcG9wZmxcbiIKKyAgICAgICAgICAiICBwdXNoZmxcbiIKKyAgICAgICAgICAiICBwb3BsICAgJSVlYXhcbiIKKyAgICAgICAgICAiICBtb3ZsICAgJDAsJTBcbiIKKyAgICAgICAgICAiICBjbXBsICAgJSVlYXgsJSVlY3hcbiIKKyAgICAgICAgICAiICBqZSAgICAgMWZcbiIKKyAgICAgICAgICAiICBtb3ZsICAgJDEsJTBcbiIKKyAgICAgICAgICAiMToiCisgICAgICAgIDogIj1yIiAoX19jcHVpZF9zdXBwb3J0ZWQpIDogOiAiZWF4IiwgImVjeCIpOworICAgIGlmICghX19jcHVpZF9zdXBwb3J0ZWQpCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCisKKyAgICBfX2NwdWlkKF9fbGV2ZWwsIF9fZWF4LCBfX2VieCwgX19lY3gsIF9fZWR4KTsKKyAgICBpZiAoX19zaWcpCisgICAgICAgICpfX3NpZyA9IF9fZWJ4OworICAgIHJldHVybiBfX2VheDsKK30KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvY3VkYV9idWlsdGluX3ZhcnMuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvY3VkYV9idWlsdGluX3ZhcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDEzNTZiCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9jdWRhX2J1aWx0aW5fdmFycy5oCkBAIC0wLDAgKzEsMTEwIEBACisvKj09PS0tLS0gY3VkYV9idWlsdGluX3ZhcnMuaCAtIENVREEgYnVpbHQtaW4gdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0NVREFfQlVJTFRJTl9WQVJTX0gKKyNkZWZpbmUgX19DVURBX0JVSUxUSU5fVkFSU19ICisKKy8vIFRoZSBmaWxlIGltcGxlbWVudHMgYnVpbHQtaW4gQ1VEQSB2YXJpYWJsZXMgdXNpbmcgX19kZWNsc3BlYyhwcm9wZXJ0eSkuCisvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3loZmswdGhkLmFzcHgKKy8vIEFsbCByZWFkIGFjY2Vzc2VzIG9mIGJ1aWx0LWluIHZhcmlhYmxlIGZpZWxkcyBnZXQgY29udmVydGVkIGludG8gY2FsbHMgdG8gYQorLy8gZ2V0dGVyIGZ1bmN0aW9uIHdoaWNoIGluIHR1cm4gd291bGQgY2FsbCBhcHByb3ByaWF0ZSBidWlsdGluIHRvIGZldGNoIHRoZQorLy8gdmFsdWUuCisvLworLy8gRXhhbXBsZToKKy8vICAgIGludCB4ID0gdGhyZWFkSWR4Lng7CisvLyBJUiBvdXRwdXQ6CisvLyAgJTAgPSBjYWxsIGkzMiBAbGx2bS5wdHgucmVhZC50aWQueCgpICMzCisvLyBQVFggb3V0cHV0OgorLy8gIG1vdi51MzIgICAgICVyMiwgJXRpZC54OworCisjZGVmaW5lIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTihGSUVMRCwgSU5UUklOU0lDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2RlY2xzcGVjKHByb3BlcnR5KGdldCA9IF9fZmV0Y2hfYnVpbHRpbl8jI0ZJRUxEKSkgdW5zaWduZWQgaW50IEZJRUxEOyAgICAgIFwKKyAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSB1bnNpZ25lZCBpbnQgX19mZXRjaF9idWlsdGluXyMjRklFTEQodm9pZCkgeyAgICAgXAorICAgIHJldHVybiBJTlRSSU5TSUM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2RlZmluZSBfX0RFTEVURSA9ZGVsZXRlCisjZWxzZQorI2RlZmluZSBfX0RFTEVURQorI2VuZGlmCisKKy8vIE1ha2Ugc3VyZSBub2JvZHkgY2FuIGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhlIHNwZWNpYWwgdmFyaWJsZSB0eXBlcy4gIG52Y2MKKy8vIGFsc28gZGlzYWxsb3dzIHRha2luZyBhZGRyZXNzIG9mIHNwZWNpYWwgdmFyaWFibGVzLCBzbyB3ZSBkaXNhYmxlIGFkZHJlc3Mtb2YKKy8vIG9wZXJhdG9yIGFzIHdlbGwuCisjZGVmaW5lIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhUeXBlTmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBUeXBlTmFtZSgpIF9fREVMRVRFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19hdHRyaWJ1dGVfXygoZGV2aWNlKSkgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUgJikgX19ERUxFVEU7ICAgICAgICAgICAgICAgICBcCisgIF9fYXR0cmlidXRlX18oKGRldmljZSkpIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFR5cGVOYW1lICYpIGNvbnN0IF9fREVMRVRFOyAgICAgXAorICBfX2F0dHJpYnV0ZV9fKChkZXZpY2UpKSBUeXBlTmFtZSAqb3BlcmF0b3ImKCkgY29uc3QgX19ERUxFVEUKKworc3RydWN0IF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90IHsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHgsX19idWlsdGluX3B0eF9yZWFkX3RpZF94KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX2J1aWx0aW5fcHR4X3JlYWRfdGlkX3koKSk7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih6LF9fYnVpbHRpbl9wdHhfcmVhZF90aWRfeigpKTsKK3ByaXZhdGU6CisgIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhfX2N1ZGFfYnVpbHRpbl90aHJlYWRJZHhfdCk7Cit9OworCitzdHJ1Y3QgX19jdWRhX2J1aWx0aW5fYmxvY2tJZHhfdCB7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih4LF9fYnVpbHRpbl9wdHhfcmVhZF9jdGFpZF94KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX2J1aWx0aW5fcHR4X3JlYWRfY3RhaWRfeSgpKTsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHosX19idWlsdGluX3B0eF9yZWFkX2N0YWlkX3ooKSk7Citwcml2YXRlOgorICBfX0NVREFfRElTQUxMT1dfQlVJTFRJTlZBUl9BQ0NFU1MoX19jdWRhX2J1aWx0aW5fYmxvY2tJZHhfdCk7Cit9OworCitzdHJ1Y3QgX19jdWRhX2J1aWx0aW5fYmxvY2tEaW1fdCB7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih4LF9fYnVpbHRpbl9wdHhfcmVhZF9udGlkX3goKSk7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih5LF9fYnVpbHRpbl9wdHhfcmVhZF9udGlkX3koKSk7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih6LF9fYnVpbHRpbl9wdHhfcmVhZF9udGlkX3ooKSk7Citwcml2YXRlOgorICBfX0NVREFfRElTQUxMT1dfQlVJTFRJTlZBUl9BQ0NFU1MoX19jdWRhX2J1aWx0aW5fYmxvY2tEaW1fdCk7Cit9OworCitzdHJ1Y3QgX19jdWRhX2J1aWx0aW5fZ3JpZERpbV90IHsKKyAgX19DVURBX0RFVklDRV9CVUlMVElOKHgsX19idWlsdGluX3B0eF9yZWFkX25jdGFpZF94KCkpOworICBfX0NVREFfREVWSUNFX0JVSUxUSU4oeSxfX2J1aWx0aW5fcHR4X3JlYWRfbmN0YWlkX3koKSk7CisgIF9fQ1VEQV9ERVZJQ0VfQlVJTFRJTih6LF9fYnVpbHRpbl9wdHhfcmVhZF9uY3RhaWRfeigpKTsKK3ByaXZhdGU6CisgIF9fQ1VEQV9ESVNBTExPV19CVUlMVElOVkFSX0FDQ0VTUyhfX2N1ZGFfYnVpbHRpbl9ncmlkRGltX3QpOworfTsKKworI2RlZmluZSBfX0NVREFfQlVJTFRJTl9WQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZXh0ZXJuIGNvbnN0IF9fYXR0cmlidXRlX18oKGRldmljZSkpIF9fYXR0cmlidXRlX18oKHdlYWspKQorX19DVURBX0JVSUxUSU5fVkFSIF9fY3VkYV9idWlsdGluX3RocmVhZElkeF90IHRocmVhZElkeDsKK19fQ1VEQV9CVUlMVElOX1ZBUiBfX2N1ZGFfYnVpbHRpbl9ibG9ja0lkeF90IGJsb2NrSWR4OworX19DVURBX0JVSUxUSU5fVkFSIF9fY3VkYV9idWlsdGluX2Jsb2NrRGltX3QgYmxvY2tEaW07CitfX0NVREFfQlVJTFRJTl9WQVIgX19jdWRhX2J1aWx0aW5fZ3JpZERpbV90IGdyaWREaW07CisKKy8vIHdhcnBTaXplIHNob3VsZCB0cmFuc2xhdGUgdG8gcmVhZCBvZiAlV0FSUF9TWiBidXQgdGhlcmUncyBjdXJyZW50bHkgbm8KKy8vIGJ1aWx0aW4gdG8gZG8gc28uIEFjY29yZGluZyB0byBQVFggdjQuMiBkb2NzICd0byBkYXRlLCBhbGwgdGFyZ2V0CisvLyBhcmNoaXRlY3R1cmVzIGhhdmUgYSBXQVJQX1NaIHZhbHVlIG9mIDMyJy4KK19fYXR0cmlidXRlX18oKGRldmljZSkpIGNvbnN0IGludCB3YXJwU2l6ZSA9IDMyOworCisjdW5kZWYgX19DVURBX0RFVklDRV9CVUlMVElOCisjdW5kZWYgX19DVURBX0JVSUxUSU5fVkFSCisjdW5kZWYgX19DVURBX0RJU0FMTE9XX0JVSUxUSU5WQVJfQUNDRVNTCisKKyNlbmRpZiAvKiBfX0NVREFfQlVJTFRJTl9WQVJTX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZW1taW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2VtbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYzJjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2VtbWludHJpbi5oCkBAIC0wLDAgKzEsMTQ5MSBAQAorLyo9PT0tLS0tIGVtbWludHJpbi5oIC0gU1NFMiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0VNTUlOVFJJTl9ICisjZGVmaW5lIF9fRU1NSU5UUklOX0gKKworI2luY2x1ZGUgPHhtbWludHJpbi5oPgorCit0eXBlZGVmIGRvdWJsZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKK3R5cGVkZWYgbG9uZyBsb25nIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBUeXBlIGRlZmluZXMuICAqLwordHlwZWRlZiBkb3VibGUgX192MmRmIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBsb25nIGxvbmcgX192MmRpIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBzaG9ydCBfX3Y4aGkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBjaGFyIF9fdjE2cWkgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBXZSBuZWVkIGFuIGV4cGxpY2l0bHkgc2lnbmVkIHZhcmlhbnQgZm9yIGNoYXIuIE5vdGUgdGhhdCB0aGlzIHNob3VsZG4ndAorICogYXBwZWFyIGluIHRoZSBpbnRlcmZhY2UgdGhvdWdoLiAqLwordHlwZWRlZiBzaWduZWQgY2hhciBfX3YxNnFzIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXygxNikpKTsKKworI2luY2x1ZGUgPGYxNmNpbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2UyIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIF9fYVswXSArPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX2FbMF0gLT0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19hWzBdICo9IF9fYlswXTsKKyAgcmV0dXJuIF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19hICogX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Rpdl9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIF9fYVswXSAvPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZGl2X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcXJ0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9zcXJ0c2QoX19iKTsKKyAgcmV0dXJuIChfX20xMjhkKSB7IF9fY1swXSwgX19hWzFdIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3FydF9wZChfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3NxcnRwZChfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9taW5zZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21pbnBkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbWF4c2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9tYXhwZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSgoX192NHNpKV9fYSAmIChfX3Y0c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hbmRub3RfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpKH4oX192NHNpKV9fYSAmIChfX3Y0c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9vcl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZCkoKF9fdjRzaSlfX2EgfCAoX192NHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1feG9yX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKSgoX192NHNpKV9fYSBeIChfX3Y0c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBlcXBkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsdHBkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsZXBkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsdHBkKF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsZXBkKF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBvcmRfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wb3JkcGQoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcHVub3JkX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcHVub3JkcGQoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBuZXFwZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmx0X3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG5sdHBkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBubGVfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmxlcGQoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5ndF9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubHRwZChfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmdlX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG5sZXBkKF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBlcXNkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsdHNkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBsZXNkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIF9fbTEyOGQgX19jID0gX19idWlsdGluX2lhMzJfY21wbHRzZChfX2IsIF9fYSk7CisgIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9jbXBsZXNkKF9fYiwgX19hKTsKKyAgcmV0dXJuIChfX20xMjhkKSB7IF9fY1swXSwgX19hWzFdIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wb3JkX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG9yZHNkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXB1bm9yZF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXB1bm9yZHNkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZXFfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbmVxc2QoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sdF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubHRzZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmxlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcG5sZXNkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ3Rfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX20xMjhkIF9fYyA9IF9fYnVpbHRpbl9pYTMyX2NtcG5sdHNkKF9fYiwgX19hKTsKKyAgcmV0dXJuIChfX20xMjhkKSB7IF9fY1swXSwgX19hWzFdIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmdlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgX19tMTI4ZCBfX2MgPSBfX2J1aWx0aW5faWEzMl9jbXBubGVzZChfX2IsIF9fYSk7CisgIHJldHVybiAoX19tMTI4ZCkgeyBfX2NbMF0sIF9fYVsxXSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29taWVxX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGVxKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlsdF9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RsdChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21pbGVfc2QoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taXNkbGUoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29taWd0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGd0KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlnZV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21pc2RnZShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21pbmVxX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZG5lcShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWVxX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RlcShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWx0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RsdChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWxlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RsZShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWd0X3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RndChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWdlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RnZShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taW5lcV9zZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taXNkbmVxKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBkX3BzKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0cGQycHMoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwc19wZChfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0cHMycGQoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGkzMl9wZChfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBkKChfX3Y0c2kpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwZF9lcGkzMihfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHBkMmRxKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzZF9zaTMyKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c2Qyc2koX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX3NzKF9fbTEyOCBfX2EsIF9fbTEyOGQgX19iKQoreworICBfX2FbMF0gPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kzMl9zZChfX20xMjhkIF9fYSwgaW50IF9fYikKK3sKKyAgX19hWzBdID0gX19iOworICByZXR1cm4gX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNzX3NkKF9fbTEyOGQgX19hLCBfX20xMjggX19iKQoreworICBfX2FbMF0gPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0dHBkX2VwaTMyKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0c2Rfc2kzMihfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGRfcGkzMihfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9jdnRwZDJwaShfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cGRfcGkzMihfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9jdnR0cGQycGkoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwaTMyX3BkKF9fbTY0IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHBpMnBkKChfX3Yyc2kpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gZG91YmxlIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNkX2Y2NChfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkX3BkKGRvdWJsZSBjb25zdCAqX19kcCkKK3sKKyAgcmV0dXJuICooX19tMTI4ZCopX19kcDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkMV9wZChkb3VibGUgY29uc3QgKl9fZHApCit7CisgIHN0cnVjdCBfX21tX2xvYWQxX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIGRvdWJsZSBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWQxX3BkX3N0cnVjdCopX19kcCktPl9fdTsKKyAgcmV0dXJuIChfX20xMjhkKXsgX191LCBfX3UgfTsKK30KKworI2RlZmluZSAgICAgICAgX21tX2xvYWRfcGQxKGRwKSAgICAgICAgX21tX2xvYWQxX3BkKGRwKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRyX3BkKGRvdWJsZSBjb25zdCAqX19kcCkKK3sKKyAgX19tMTI4ZCBfX3UgPSAqKF9fbTEyOGQqKV9fZHA7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3UsIF9fdSwgMSwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZHVfcGQoZG91YmxlIGNvbnN0ICpfX2RwKQoreworICBzdHJ1Y3QgX19sb2FkdV9wZCB7CisgICAgX19tMTI4ZCBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICByZXR1cm4gKChzdHJ1Y3QgX19sb2FkdV9wZCopX19kcCktPl9fdjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkX3NkKGRvdWJsZSBjb25zdCAqX19kcCkKK3sKKyAgc3RydWN0IF9fbW1fbG9hZF9zZF9zdHJ1Y3QgeworICAgIGRvdWJsZSBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBkb3VibGUgX191ID0gKChzdHJ1Y3QgX19tbV9sb2FkX3NkX3N0cnVjdCopX19kcCktPl9fdTsKKyAgcmV0dXJuIChfX20xMjhkKXsgX191LCAwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZGhfcGQoX19tMTI4ZCBfX2EsIGRvdWJsZSBjb25zdCAqX19kcCkKK3sKKyAgc3RydWN0IF9fbW1fbG9hZGhfcGRfc3RydWN0IHsKKyAgICBkb3VibGUgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgZG91YmxlIF9fdSA9ICgoc3RydWN0IF9fbW1fbG9hZGhfcGRfc3RydWN0KilfX2RwKS0+X191OworICByZXR1cm4gKF9fbTEyOGQpeyBfX2FbMF0sIF9fdSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRsX3BkKF9fbTEyOGQgX19hLCBkb3VibGUgY29uc3QgKl9fZHApCit7CisgIHN0cnVjdCBfX21tX2xvYWRsX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIGRvdWJsZSBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWRsX3BkX3N0cnVjdCopX19kcCktPl9fdTsKKyAgcmV0dXJuIChfX20xMjhkKXsgX191LCBfX2FbMV0gfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bmRlZmluZWRfcGQoKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdW5kZWYxMjgoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfc2QoZG91YmxlIF9fdykKK3sKKyAgcmV0dXJuIChfX20xMjhkKXsgX193LCAwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9wZChkb3VibGUgX193KQoreworICByZXR1cm4gKF9fbTEyOGQpeyBfX3csIF9fdyB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9wZChkb3VibGUgX193LCBkb3VibGUgX194KQoreworICByZXR1cm4gKF9fbTEyOGQpeyBfX3gsIF9fdyB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfcGQoZG91YmxlIF9fdywgZG91YmxlIF9feCkKK3sKKyAgcmV0dXJuIChfX20xMjhkKXsgX193LCBfX3ggfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXR6ZXJvX3BkKHZvaWQpCit7CisgIHJldHVybiAoX19tMTI4ZCl7IDAsIDAgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlX3NkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhkKXsgX19iWzBdLCBfX2FbMV0gfTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZV9zZChkb3VibGUgKl9fZHAsIF9fbTEyOGQgX19hKQoreworICBzdHJ1Y3QgX19tbV9zdG9yZV9zZF9zdHJ1Y3QgeworICAgIGRvdWJsZSBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX21tX3N0b3JlX3NkX3N0cnVjdCopX19kcCktPl9fdSA9IF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZTFfcGQoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmUxX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdVsyXTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fbW1fc3RvcmUxX3BkX3N0cnVjdCopX19kcCktPl9fdVswXSA9IF9fYVswXTsKKyAgKChzdHJ1Y3QgX19tbV9zdG9yZTFfcGRfc3RydWN0KilfX2RwKS0+X191WzFdID0gX19hWzBdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JlX3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgICooX19tMTI4ZCAqKV9fZHAgPSBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmV1X3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBkKF9fZHAsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVyX3BkKGRvdWJsZSAqX19kcCwgX19tMTI4ZCBfX2EpCit7CisgIF9fYSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAxLCAwKTsKKyAgKihfX20xMjhkICopX19kcCA9IF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZWhfcGQoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmVoX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fbW1fc3RvcmVoX3BkX3N0cnVjdCopX19kcCktPl9fdSA9IF9fYVsxXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZWxfcGQoZG91YmxlICpfX2RwLCBfX20xMjhkIF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmVoX3BkX3N0cnVjdCB7CisgICAgZG91YmxlIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgICgoc3RydWN0IF9fbW1fc3RvcmVoX3BkX3N0cnVjdCopX19kcCktPl9fdSA9IF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjE2cWkpX19hICsgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aGkpX19hICsgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjRzaSlfX2EgKyAoX192NHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9zaTY0KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRxKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRkc2IxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFkZHN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc19lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGR1c2IxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfZXB1MTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFkZHVzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2F2Z19lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhdmdiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hdmdfZXB1MTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGF2Z3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWRkX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtYWRkd2QxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG1heHN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X2VwdTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG1heHViMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG1pbnN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwdTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG1pbnViMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxoaV9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbXVsaHcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxoaV9lcHUxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbXVsaHV3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsbG9fZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aGkpX19hICogKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxfc3UzMihfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHEoKF9fdjJzaSlfX2EsIChfX3Yyc2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxfZXB1MzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcG11bHVkcTEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NhZF9lcHU4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzYWRidzEyOCgoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3YxNnFpKV9fYSAtIChfX3YxNnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192OGhpKV9fYSAtIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y0c2kpX19hIC0gKF9fdjRzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfc2k2NChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3VicShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJzX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHN1YnNiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzdWJzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1YnNfZXB1OChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3VidXNiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJzX2VwdTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzdWJ1c3cxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hbmRfc2kxMjgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZG5vdF9zaTEyOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiB+X19hICYgX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX29yX3NpMTI4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV94b3Jfc2kxMjgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCisjZGVmaW5lIF9tbV9zbGxpX3NpMTI4KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFpKV9tbV9zZXR6ZXJvX3NpMTI4KCksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShhKSwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAxNiAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAxNyAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAxOCAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAxOSAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyMCAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyMSAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyMiAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyMyAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyNCAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyNSAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyNiAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyNyAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyOCAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAyOSAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAzMCAtICgoaW1tKSYweEYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDAgOiAzMSAtICgoaW1tKSYweEYpKTsgfSkKKworI2RlZmluZSBfbW1fYnNsbGlfc2kxMjgoYSwgaW1tKSBcCisgIF9tbV9zbGxpX3NpMTI4KChhKSwgKGltbSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsaV9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsd2kxMjgoKF9fdjhoaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsaV9lcGkzMihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsZGkxMjgoKF9fdjRzaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbF9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbGQxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsaV9lcGk2NChfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc2xscWkxMjgoX19hLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxfZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzbGxxMTI4KF9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JhaV9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3Jhd2kxMjgoKF9fdjhoaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYV9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYXcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JhaV9lcGkzMihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhZGkxMjgoKF9fdjRzaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYV9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYWQxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKKyNkZWZpbmUgX21tX3NybGlfc2kxMjgoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFpKShfX20xMjhpKShhKSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSlfbW1fc2V0emVyb19zaTEyOCgpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDAsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyAxLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgMiwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDMsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyA0LCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgNSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDYsICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyA3LCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgOCwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyAxMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgMTEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDEyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSYweEYwKSA/IDE2IDogKChpbW0pJjB4RikgKyAxMywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkmMHhGMCkgPyAxNiA6ICgoaW1tKSYweEYpICsgMTQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChpbW0pJjB4RjApID8gMTYgOiAoKGltbSkmMHhGKSArIDE1KTsgfSkKKworI2RlZmluZSBfbW1fYnNybGlfc2kxMjgoYSwgaW1tKSBcCisgIF9tbV9zcmxpX3NpMTI4KChhKSwgKGltbSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsaV9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3Jsd2kxMjgoKF9fdjhoaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybHcxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsaV9lcGkzMihfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkxMjgoKF9fdjRzaSlfX2EsIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybF9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2NvdW50KQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNybGQxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsaV9lcGk2NChfX20xMjhpIF9fYSwgaW50IF9fY291bnQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wc3JscWkxMjgoX19hLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxfZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19jb3VudCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BzcmxxMTI4KF9fYSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjE2cWkpX19hID09IChfX3YxNnFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y4aGkpX19hID09IChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjRzaSlfX2EgPT0gKF9fdjRzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAvKiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBwZXJmb3JtcyBhIHNpZ25lZCBjb21wYXJpc29uLCBidXQgX192MTZxaSBpcyBhIGNoYXIKKyAgICAgd2hpY2ggbWF5IGJlIHNpZ25lZCBvciB1bnNpZ25lZCwgc28gdXNlIF9fdjE2cXMuICovCisgIHJldHVybiAoX19tMTI4aSkoKF9fdjE2cXMpX19hID4gKF9fdjE2cXMpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjhoaSlfX2EgPiAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpKChfX3Y0c2kpX19hID4gKF9fdjRzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gX21tX2NtcGd0X2VwaTgoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIF9tbV9jbXBndF9lcGkxNihfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbHRfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gX21tX2NtcGd0X2VwaTMyKF9fYiwgX19hKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2k2NF9zZChfX20xMjhkIF9fYSwgbG9uZyBsb25nIF9fYikKK3sKKyAgX19hWzBdID0gX19iOworICByZXR1cm4gX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2Rfc2k2NChfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNkMnNpNjQoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzZF9zaTY0KF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19hWzBdOworfQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGkzMl9wcyhfX20xMjhpIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dGRxMnBzKChfX3Y0c2kpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwc19lcGkzMihfX20xMjggX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHEoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0cHNfZXBpMzIoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcShfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpMzJfc2kxMjgoaW50IF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKShfX3Y0c2kpeyBfX2EsIDAsIDAsIDAgfTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2k2NF9zaTEyOChsb25nIGxvbmcgX19hKQoreworICByZXR1cm4gKF9fbTEyOGkpeyBfX2EsIDAgfTsKK30KKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kxMjhfc2kzMihfX20xMjhpIF9fYSkKK3sKKyAgX192NHNpIF9fYiA9IChfX3Y0c2kpX19hOworICByZXR1cm4gX19iWzBdOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpMTI4X3NpNjQoX19tMTI4aSBfX2EpCit7CisgIHJldHVybiBfX2FbMF07Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkX3NpMTI4KF9fbTEyOGkgY29uc3QgKl9fcCkKK3sKKyAgcmV0dXJuICpfX3A7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZHVfc2kxMjgoX19tMTI4aSBjb25zdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9zaTEyOCB7CisgICAgX19tMTI4aSBfX3Y7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICByZXR1cm4gKChzdHJ1Y3QgX19sb2FkdV9zaTEyOCopX19wKS0+X192OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRsX2VwaTY0KF9fbTEyOGkgY29uc3QgKl9fcCkKK3sKKyAgc3RydWN0IF9fbW1fbG9hZGxfZXBpNjRfc3RydWN0IHsKKyAgICBsb25nIGxvbmcgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgcmV0dXJuIChfX20xMjhpKSB7ICgoc3RydWN0IF9fbW1fbG9hZGxfZXBpNjRfc3RydWN0KilfX3ApLT5fX3UsIDB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VuZGVmaW5lZF9zaTEyOCgpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl91bmRlZjEyOCgpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9lcGk2NHgobG9uZyBsb25nIF9fcTEsIGxvbmcgbG9uZyBfX3EwKQoreworICByZXR1cm4gKF9fbTEyOGkpeyBfX3EwLCBfX3ExIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X2VwaTY0KF9fbTY0IF9fcTEsIF9fbTY0IF9fcTApCit7CisgIHJldHVybiAoX19tMTI4aSl7IChsb25nIGxvbmcpX19xMCwgKGxvbmcgbG9uZylfX3ExIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X2VwaTMyKGludCBfX2kzLCBpbnQgX19pMiwgaW50IF9faTEsIGludCBfX2kwKQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjRzaSl7IF9faTAsIF9faTEsIF9faTIsIF9faTN9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9lcGkxNihzaG9ydCBfX3c3LCBzaG9ydCBfX3c2LCBzaG9ydCBfX3c1LCBzaG9ydCBfX3c0LCBzaG9ydCBfX3czLCBzaG9ydCBfX3cyLCBzaG9ydCBfX3cxLCBzaG9ydCBfX3cwKQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjhoaSl7IF9fdzAsIF9fdzEsIF9fdzIsIF9fdzMsIF9fdzQsIF9fdzUsIF9fdzYsIF9fdzcgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfZXBpOChjaGFyIF9fYjE1LCBjaGFyIF9fYjE0LCBjaGFyIF9fYjEzLCBjaGFyIF9fYjEyLCBjaGFyIF9fYjExLCBjaGFyIF9fYjEwLCBjaGFyIF9fYjksIGNoYXIgX19iOCwgY2hhciBfX2I3LCBjaGFyIF9fYjYsIGNoYXIgX19iNSwgY2hhciBfX2I0LCBjaGFyIF9fYjMsIGNoYXIgX19iMiwgY2hhciBfX2IxLCBjaGFyIF9fYjApCit7CisgIHJldHVybiAoX19tMTI4aSkoX192MTZxaSl7IF9fYjAsIF9fYjEsIF9fYjIsIF9fYjMsIF9fYjQsIF9fYjUsIF9fYjYsIF9fYjcsIF9fYjgsIF9fYjksIF9fYjEwLCBfX2IxMSwgX19iMTIsIF9fYjEzLCBfX2IxNCwgX19iMTUgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX2VwaTY0eChsb25nIGxvbmcgX19xKQoreworICByZXR1cm4gKF9fbTEyOGkpeyBfX3EsIF9fcSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldDFfZXBpNjQoX19tNjQgX19xKQoreworICByZXR1cm4gKF9fbTEyOGkpeyAobG9uZyBsb25nKV9fcSwgKGxvbmcgbG9uZylfX3EgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX2VwaTMyKGludCBfX2kpCit7CisgIHJldHVybiAoX19tMTI4aSkoX192NHNpKXsgX19pLCBfX2ksIF9faSwgX19pIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9lcGkxNihzaG9ydCBfX3cpCit7CisgIHJldHVybiAoX19tMTI4aSkoX192OGhpKXsgX193LCBfX3csIF9fdywgX193LCBfX3csIF9fdywgX193LCBfX3cgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX2VwaTgoY2hhciBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSkoX192MTZxaSl7IF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfZXBpNjQoX19tNjQgX19xMCwgX19tNjQgX19xMSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgKGxvbmcgbG9uZylfX3EwLCAobG9uZyBsb25nKV9fcTEgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX2VwaTMyKGludCBfX2kwLCBpbnQgX19pMSwgaW50IF9faTIsIGludCBfX2kzKQoreworICByZXR1cm4gKF9fbTEyOGkpKF9fdjRzaSl7IF9faTAsIF9faTEsIF9faTIsIF9faTN9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfZXBpMTYoc2hvcnQgX193MCwgc2hvcnQgX193MSwgc2hvcnQgX193Miwgc2hvcnQgX193Mywgc2hvcnQgX193NCwgc2hvcnQgX193NSwgc2hvcnQgX193Niwgc2hvcnQgX193NykKK3sKKyAgcmV0dXJuIChfX20xMjhpKShfX3Y4aGkpeyBfX3cwLCBfX3cxLCBfX3cyLCBfX3czLCBfX3c0LCBfX3c1LCBfX3c2LCBfX3c3IH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0cl9lcGk4KGNoYXIgX19iMCwgY2hhciBfX2IxLCBjaGFyIF9fYjIsIGNoYXIgX19iMywgY2hhciBfX2I0LCBjaGFyIF9fYjUsIGNoYXIgX19iNiwgY2hhciBfX2I3LCBjaGFyIF9fYjgsIGNoYXIgX19iOSwgY2hhciBfX2IxMCwgY2hhciBfX2IxMSwgY2hhciBfX2IxMiwgY2hhciBfX2IxMywgY2hhciBfX2IxNCwgY2hhciBfX2IxNSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKShfX3YxNnFpKXsgX19iMCwgX19iMSwgX19iMiwgX19iMywgX19iNCwgX19iNSwgX19iNiwgX19iNywgX19iOCwgX19iOSwgX19iMTAsIF9fYjExLCBfX2IxMiwgX19iMTMsIF9fYjE0LCBfX2IxNSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHplcm9fc2kxMjgodm9pZCkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgMExMLCAwTEwgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdG9yZV9zaTEyOChfX20xMjhpICpfX3AsIF9fbTEyOGkgX19iKQoreworICAqX19wID0gX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JldV9zaTEyOChfX20xMjhpICpfX3AsIF9fbTEyOGkgX19iKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZWRxdSgoY2hhciAqKV9fcCwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXNrbW92ZXVfc2kxMjgoX19tMTI4aSBfX2QsIF9fbTEyOGkgX19uLCBjaGFyICpfX3ApCit7CisgIF9fYnVpbHRpbl9pYTMyX21hc2ttb3ZkcXUoKF9fdjE2cWkpX19kLCAoX192MTZxaSlfX24sIF9fcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVsX2VwaTY0KF9fbTEyOGkgKl9fcCwgX19tMTI4aSBfX2EpCit7CisgIHN0cnVjdCBfX21tX3N0b3JlbF9lcGk2NF9zdHJ1Y3QgeworICAgIGxvbmcgbG9uZyBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX21tX3N0b3JlbF9lcGk2NF9zdHJ1Y3QqKV9fcCktPl9fdSA9IF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fcGQoZG91YmxlICpfX3AsIF9fbTEyOGQgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudHBkKF9fcCwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fc2kxMjgoX19tMTI4aSAqX19wLCBfX20xMjhpIF9fYSkKK3sKKyAgX19idWlsdGluX2lhMzJfbW92bnRkcShfX3AsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RyZWFtX3NpMzIoaW50ICpfX3AsIGludCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX21vdm50aShfX3AsIF9fYSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9zaTY0KGxvbmcgbG9uZyAqX19wLCBsb25nIGxvbmcgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudGk2NChfX3AsIF9fYSk7Cit9CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbGZsdXNoKHZvaWQgY29uc3QgKl9fcCkKK3sKKyAgX19idWlsdGluX2lhMzJfY2xmbHVzaChfX3ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xmZW5jZSh2b2lkKQoreworICBfX2J1aWx0aW5faWEzMl9sZmVuY2UoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tZmVuY2Uodm9pZCkKK3sKKyAgX19idWlsdGluX2lhMzJfbWZlbmNlKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGFja3NfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFja3Nzd2IxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wYWNrc19lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWNrc3NkdzEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2t1c19lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZXh0cmFjdF9lcGkxNihfX20xMjhpIF9fYSwgaW50IF9faW1tKQoreworICBfX3Y4aGkgX19iID0gKF9fdjhoaSlfX2E7CisgIHJldHVybiAodW5zaWduZWQgc2hvcnQpX19iW19faW1tICYgN107Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faW5zZXJ0X2VwaTE2KF9fbTEyOGkgX19hLCBpbnQgX19iLCBpbnQgX19pbW0pCit7CisgIF9fdjhoaSBfX2MgPSAoX192OGhpKV9fYTsKKyAgX19jW19faW1tICYgN10gPSBfX2I7CisgIHJldHVybiAoX19tMTI4aSlfX2M7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlbWFza19lcGk4KF9fbTEyOGkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdm1za2IxMjgoKF9fdjE2cWkpX19hKTsKK30KKworI2RlZmluZSBfbW1fc2h1ZmZsZV9lcGkzMihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltbSkgJiAweDMsICgoaW1tKSAmIDB4YykgPj4gMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGltbSkgJiAweDMwKSA+PiA0LCAoKGltbSkgJiAweGMwKSA+PiA2KTsgfSkKKworI2RlZmluZSBfbW1fc2h1ZmZsZWxvX2VwaTE2KGEsIGltbSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpX21tX3NldHplcm9fc2kxMjgoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1tKSAmIDB4MywgKChpbW0pICYgMHhjKSA+PiAyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaW1tKSAmIDB4MzApID4+IDQsICgoaW1tKSAmIDB4YzApID4+IDYsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgNSwgNiwgNyk7IH0pCisKKyNkZWZpbmUgX21tX3NodWZmbGVoaV9lcGkxNihhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGhpKShfX20xMjhpKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OGhpKV9tbV9zZXR6ZXJvX3NpMTI4KCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSAmIDB4MDMpID4+IDApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgKyAoKChpbW0pICYgMHgwYykgPj4gMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCArICgoKGltbSkgJiAweDMwKSA+PiA0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICsgKCgoaW1tKSAmIDB4YzApID4+IDYpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iLCA4LCAxNis4LCA5LCAxNis5LCAxMCwgMTYrMTAsIDExLCAxNisxMSwgMTIsIDE2KzEyLCAxMywgMTYrMTMsIDE0LCAxNisxNCwgMTUsIDE2KzE1KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2toaV9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IsIDQsIDgrNCwgNSwgOCs1LCA2LCA4KzYsIDcsIDgrNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iLCAyLCA0KzIsIDMsIDQrMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfZXBpNjQoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDEsIDIrMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fZXBpOChfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MTZxaSlfX2EsIChfX3YxNnFpKV9fYiwgMCwgMTYrMCwgMSwgMTYrMSwgMiwgMTYrMiwgMywgMTYrMywgNCwgMTYrNCwgNSwgMTYrNSwgNiwgMTYrNiwgNywgMTYrNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iLCAwLCA4KzAsIDEsIDgrMSwgMiwgOCsyLCAzLCA4KzMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2xvX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y0c2kpX19hLCAoX192NHNpKV9fYiwgMCwgNCswLCAxLCA0KzEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2xvX2VwaTY0KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAwLCAyKzApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlcGk2NF9waTY0KF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTY0KV9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZwaTY0X2VwaTY0KF9fbTY0IF9fYSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKXsgKGxvbmcgbG9uZylfX2EsIDAgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlX2VwaTY0KF9fbTEyOGkgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCAoX19tMTI4aSl7IDAgfSwgMCwgMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDEsIDIrMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fcGQoX19tMTI4ZCBfX2EsIF9fbTEyOGQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDAsIDIrMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlbWFza19wZChfX20xMjhkIF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1za3BkKF9fYSk7Cit9CisKKyNkZWZpbmUgX21tX3NodWZmbGVfcGQoYSwgYiwgaSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3YyZGYpKF9fbTEyOGQpKGEpLCAoX192MmRmKShfX20xMjhkKShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSkgJiAxLCAoKChpKSAmIDIpID4+IDEpICsgMik7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jYXN0cGRfcHMoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4KV9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jYXN0cGRfc2kxMjgoX19tMTI4ZCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2FzdHBzX3BkKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY2FzdHBzX3NpMTI4KF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jYXN0c2kxMjhfcHMoX19tMTI4aSBfX2EpCit7CisgIHJldHVybiAoX19tMTI4KV9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jYXN0c2kxMjhfcGQoX19tMTI4aSBfX2EpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGF1c2Uodm9pZCkKK3sKKyAgX19idWlsdGluX2lhMzJfcGF1c2UoKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZGVmaW5lIF9NTV9TSFVGRkxFMih4LCB5KSAoKCh4KSA8PCAxKSB8ICh5KSkKKworI2VuZGlmIC8qIF9fRU1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZjE2Y2ludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mMTZjaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1NWQ5OAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZjE2Y2ludHJpbi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qPT09LS0tLSBmMTZjaW50cmluLmggLSBGMTZDIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZiAhZGVmaW5lZCBfX1g4NklOVFJJTl9IICYmICFkZWZpbmVkIF9fRU1NSU5UUklOX0ggJiYgIWRlZmluZWQgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGYxNmNpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGVtbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fRjE2Q0lOVFJJTl9ICisjZGVmaW5lIF9fRjE2Q0lOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZjE2YyIpKSkKKworI2RlZmluZSBfbW1fY3Z0cHNfcGgoYSwgaW1tKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92Y3Z0cHMycGgoKF9fdjRzZikoX19tMTI4KShhKSwgKGltbSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBoX3BzKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHMoKF9fdjhoaSlfX2EpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX0YxNkNJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbG9hdC5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbG9hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOGNmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2Zsb2F0LmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qPT09LS0tLSBmbG9hdC5oIC0gQ2hhcmFjdGVyaXN0aWNzIG9mIGZsb2F0aW5nIHBvaW50IHR5cGVzIC0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19GTE9BVF9ICisjZGVmaW5lIF9fRkxPQVRfSAorCisvKiBJZiB3ZSdyZSBvbiBNaW5HVywgZmFsbCBiYWNrIHRvIHRoZSBzeXN0ZW0ncyBmbG9hdC5oLCB3aGljaCBtaWdodCBoYXZlCisgKiBhZGRpdGlvbmFsIGRlZmluaXRpb25zIHByb3ZpZGVkIGZvciBXaW5kb3dzLgorICogRm9yIG1vcmUgZGV0YWlscyBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3kweWJ3OWZ5LmFzcHgKKyAqLworI2lmIChkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSkgJiYgX19TVERDX0hPU1RFRF9fICYmIFwKKyAgICBfX2hhc19pbmNsdWRlX25leHQoPGZsb2F0Lmg+KQorIyAgaW5jbHVkZV9uZXh0IDxmbG9hdC5oPgorCisvKiBVbmRlZmluZSBhbnl0aGluZyB0aGF0IHdlJ2xsIGJlIHJlZGVmaW5pbmcgYmVsb3cuICovCisjICB1bmRlZiBGTFRfRVZBTF9NRVRIT0QKKyMgIHVuZGVmIEZMVF9ST1VORFMKKyMgIHVuZGVmIEZMVF9SQURJWAorIyAgdW5kZWYgRkxUX01BTlRfRElHCisjICB1bmRlZiBEQkxfTUFOVF9ESUcKKyMgIHVuZGVmIExEQkxfTUFOVF9ESUcKKyMgIHVuZGVmIERFQ0lNQUxfRElHCisjICB1bmRlZiBGTFRfRElHCisjICB1bmRlZiBEQkxfRElHCisjICB1bmRlZiBMREJMX0RJRworIyAgdW5kZWYgRkxUX01JTl9FWFAKKyMgIHVuZGVmIERCTF9NSU5fRVhQCisjICB1bmRlZiBMREJMX01JTl9FWFAKKyMgIHVuZGVmIEZMVF9NSU5fMTBfRVhQCisjICB1bmRlZiBEQkxfTUlOXzEwX0VYUAorIyAgdW5kZWYgTERCTF9NSU5fMTBfRVhQCisjICB1bmRlZiBGTFRfTUFYX0VYUAorIyAgdW5kZWYgREJMX01BWF9FWFAKKyMgIHVuZGVmIExEQkxfTUFYX0VYUAorIyAgdW5kZWYgRkxUX01BWF8xMF9FWFAKKyMgIHVuZGVmIERCTF9NQVhfMTBfRVhQCisjICB1bmRlZiBMREJMX01BWF8xMF9FWFAKKyMgIHVuZGVmIEZMVF9NQVgKKyMgIHVuZGVmIERCTF9NQVgKKyMgIHVuZGVmIExEQkxfTUFYCisjICB1bmRlZiBGTFRfRVBTSUxPTgorIyAgdW5kZWYgREJMX0VQU0lMT04KKyMgIHVuZGVmIExEQkxfRVBTSUxPTgorIyAgdW5kZWYgRkxUX01JTgorIyAgdW5kZWYgREJMX01JTgorIyAgdW5kZWYgTERCTF9NSU4KKyMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCB8fCAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisjICAgIHVuZGVmIEZMVF9UUlVFX01JTgorIyAgICB1bmRlZiBEQkxfVFJVRV9NSU4KKyMgICAgdW5kZWYgTERCTF9UUlVFX01JTgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBDaGFyYWN0ZXJpc3RpY3Mgb2YgZmxvYXRpbmcgcG9pbnQgdHlwZXMsIEM5OSA1LjIuNC4yLjIgKi8KKworI2RlZmluZSBGTFRfRVZBTF9NRVRIT0QgX19GTFRfRVZBTF9NRVRIT0RfXworI2RlZmluZSBGTFRfUk9VTkRTIChfX2J1aWx0aW5fZmx0X3JvdW5kcygpKQorI2RlZmluZSBGTFRfUkFESVggX19GTFRfUkFESVhfXworCisjZGVmaW5lIEZMVF9NQU5UX0RJRyBfX0ZMVF9NQU5UX0RJR19fCisjZGVmaW5lIERCTF9NQU5UX0RJRyBfX0RCTF9NQU5UX0RJR19fCisjZGVmaW5lIExEQkxfTUFOVF9ESUcgX19MREJMX01BTlRfRElHX18KKworI2RlZmluZSBERUNJTUFMX0RJRyBfX0RFQ0lNQUxfRElHX18KKworI2RlZmluZSBGTFRfRElHIF9fRkxUX0RJR19fCisjZGVmaW5lIERCTF9ESUcgX19EQkxfRElHX18KKyNkZWZpbmUgTERCTF9ESUcgX19MREJMX0RJR19fCisKKyNkZWZpbmUgRkxUX01JTl9FWFAgX19GTFRfTUlOX0VYUF9fCisjZGVmaW5lIERCTF9NSU5fRVhQIF9fREJMX01JTl9FWFBfXworI2RlZmluZSBMREJMX01JTl9FWFAgX19MREJMX01JTl9FWFBfXworCisjZGVmaW5lIEZMVF9NSU5fMTBfRVhQIF9fRkxUX01JTl8xMF9FWFBfXworI2RlZmluZSBEQkxfTUlOXzEwX0VYUCBfX0RCTF9NSU5fMTBfRVhQX18KKyNkZWZpbmUgTERCTF9NSU5fMTBfRVhQIF9fTERCTF9NSU5fMTBfRVhQX18KKworI2RlZmluZSBGTFRfTUFYX0VYUCBfX0ZMVF9NQVhfRVhQX18KKyNkZWZpbmUgREJMX01BWF9FWFAgX19EQkxfTUFYX0VYUF9fCisjZGVmaW5lIExEQkxfTUFYX0VYUCBfX0xEQkxfTUFYX0VYUF9fCisKKyNkZWZpbmUgRkxUX01BWF8xMF9FWFAgX19GTFRfTUFYXzEwX0VYUF9fCisjZGVmaW5lIERCTF9NQVhfMTBfRVhQIF9fREJMX01BWF8xMF9FWFBfXworI2RlZmluZSBMREJMX01BWF8xMF9FWFAgX19MREJMX01BWF8xMF9FWFBfXworCisjZGVmaW5lIEZMVF9NQVggX19GTFRfTUFYX18KKyNkZWZpbmUgREJMX01BWCBfX0RCTF9NQVhfXworI2RlZmluZSBMREJMX01BWCBfX0xEQkxfTUFYX18KKworI2RlZmluZSBGTFRfRVBTSUxPTiBfX0ZMVF9FUFNJTE9OX18KKyNkZWZpbmUgREJMX0VQU0lMT04gX19EQkxfRVBTSUxPTl9fCisjZGVmaW5lIExEQkxfRVBTSUxPTiBfX0xEQkxfRVBTSUxPTl9fCisKKyNkZWZpbmUgRkxUX01JTiBfX0ZMVF9NSU5fXworI2RlZmluZSBEQkxfTUlOIF9fREJMX01JTl9fCisjZGVmaW5lIExEQkxfTUlOIF9fTERCTF9NSU5fXworCisjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKyMgIGRlZmluZSBGTFRfVFJVRV9NSU4gX19GTFRfREVOT1JNX01JTl9fCisjICBkZWZpbmUgREJMX1RSVUVfTUlOIF9fREJMX0RFTk9STV9NSU5fXworIyAgZGVmaW5lIExEQkxfVFJVRV9NSU4gX19MREJMX0RFTk9STV9NSU5fXworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0ZMT0FUX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZm1hNGludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWE0aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExNzg4NwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZm1hNGludHJpbi5oCkBAIC0wLDAgKzEsMjMwIEBACisvKj09PS0tLS0gZm1hNGludHJpbi5oIC0gRk1BNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fWDg2SU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxmbWE0aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0ZNQTRJTlRSSU5fSAorI2RlZmluZSBfX0ZNQTRJTlRSSU5fSAorCisjaW5jbHVkZSA8cG1taW50cmluLmg+CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZm1hNCIpKSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2NfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkcHMoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY19wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNzKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2Nfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHNkKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1zdWJwcyhfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm1zdWJwZChfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21zdWJfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtc3Vic3MoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXN1Yl9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtc3Vic2QoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ubWFjY19wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHMoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbm1hY2NfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZChfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX25tYWNjX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRzcyhfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ubWFjY19zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubWFkZHNkKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbm1zdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubXN1YnBzKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX25tc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ubXN1Yl9zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tc3Vic3MoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbm1zdWJfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJzZChfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGRzdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFkZHN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tc3ViYWRkX3BzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBzKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21zdWJhZGRfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBkKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFjY19wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1hZGRwczI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYWNjX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRwZDI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21zdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtc3VicHMyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtc3VicGQyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9ubWFjY19wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm5tYWRkcHMyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbm1hY2NfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZDI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X25tc3ViX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3Zmbm1zdWJwczI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9ubXN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZubXN1YnBkMjU2KF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbWFkZHN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9tYWRkc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwZDI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X21zdWJhZGRfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHMyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfbXN1YmFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fRk1BNElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ZtYWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWFpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRhMTQzCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9mbWFpbnRyaW4uaApAQCAtMCwwICsxLDIyOCBAQAorLyo9PT0tLS0tIGZtYTRpbnRyaW4uaCAtIEZNQTQgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8Zm1haW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0ZNQUlOVFJJTl9ICisjZGVmaW5lIF9fRk1BSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmbWEiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbWFkZF9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRwcyhfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbWFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkcGQoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbWFkZF9zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1hZGRzcyhfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbWFkZF9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtYWRkc2QoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbXN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1zdWJwcyhfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbXN1Yl9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtc3VicGQoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbXN1Yl9zcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm1zdWJzcyhfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbXN1Yl9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZtc3Vic2QoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbm1hZGRfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubWFkZHBzKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZubWFkZF9wZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubWFkZHBkKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm5tYWRkX3NzKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIF9fbTEyOCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRzcyhfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbm1hZGRfc2QoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRzZChfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZubXN1Yl9wcyhfX20xMjggX19BLCBfX20xMjggX19CLCBfX20xMjggX19DKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm5tc3ViX3BkKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQiwgX19tMTI4ZCBfX0MpCit7CisgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mbm1zdWJfc3MoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZubXN1YnNzKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZubXN1Yl9zZChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IsIF9fbTEyOGQgX19DKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZubXN1YnNkKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1hZGRzdWJfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicHMoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1hZGRzdWJfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHN1YnBkKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1zdWJhZGRfcHMoX19tMTI4IF9fQSwgX19tMTI4IF9fQiwgX19tMTI4IF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcHMoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZm1zdWJhZGRfcGQoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CLCBfX20xMjhkIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YmFkZHBkKF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm1hZGRfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtYWRkcHMyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm1hZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbWFkZHBkMjU2KF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm1zdWJfcHMoX19tMjU2IF9fQSwgX19tMjU2IF9fQiwgX19tMjU2IF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTYpX19idWlsdGluX2lhMzJfdmZtc3VicHMyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm1zdWJfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3ZmbXN1YnBkMjU2KF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTYgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm5tYWRkX3BzKF9fbTI1NiBfX0EsIF9fbTI1NiBfX0IsIF9fbTI1NiBfX0MpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwczI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbm1hZGRfcGQoX19tMjU2ZCBfX0EsIF9fbTI1NmQgX19CLCBfX20yNTZkIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZkKV9fYnVpbHRpbl9pYTMyX3Zmbm1hZGRwZDI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2IF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZubXN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm5tc3VicHMyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NmQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW0yNTZfZm5tc3ViX3BkKF9fbTI1NmQgX19BLCBfX20yNTZkIF9fQiwgX19tMjU2ZCBfX0MpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92Zm5tc3VicGQyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbWFkZHN1Yl9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1hZGRzdWJwczI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbWFkZHN1Yl9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtYWRkc3VicGQyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbXN1YmFkZF9wcyhfX20yNTYgX19BLCBfX20yNTYgX19CLCBfX20yNTYgX19DKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Zm1zdWJhZGRwczI1NihfX0EsIF9fQiwgX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMjU2ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mbXN1YmFkZF9wZChfX20yNTZkIF9fQSwgX19tMjU2ZCBfX0IsIF9fbTI1NmQgX19DKQoreworICByZXR1cm4gKF9fbTI1NmQpX19idWlsdGluX2lhMzJfdmZtc3ViYWRkcGQyNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fRk1BSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZnhzcmludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9meHNyaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2MDI2YQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvZnhzcmludHJpbi5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qPT09LS0tLSBmeHNyaW50cmluLmggLSBGWFNSIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGZ4c3JpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fRlhTUklOVFJJTl9ICisjZGVmaW5lIF9fRlhTUklOVFJJTl9ICisKKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oImZ4c3IiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfZnhzYXZlKHZvaWQgKl9fcCkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfZnhzYXZlKF9fcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfZnhzYXZlNjQodm9pZCAqX19wKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9meHNhdmU2NChfX3ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX2Z4cnN0b3Iodm9pZCAqX19wKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9meHJzdG9yKF9fcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfZnhyc3RvcjY0KHZvaWQgKl9fcCkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfZnhyc3RvcjY0KF9fcCk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9odG1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDg4YzdjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9odG1pbnRyaW4uaApAQCAtMCwwICsxLDIyNiBAQAorLyo9PT0tLS0tIGh0bWludHJpbi5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciBQb3dlclBDIEhUTSAtLS0tLS0tLS0tLS0tLS09PT0qXAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fSFRNSU5UUklOX0gKKyNkZWZpbmUgX19IVE1JTlRSSU5fSAorCisjaWZuZGVmIF9fSFRNX18KKyNlcnJvciAiSFRNIGluc3RydWN0aW9uIHNldCBub3QgZW5hYmxlZCIKKyNlbmRpZgorCisjaWZkZWYgX19wb3dlcnBjX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCit0eXBlZGVmIHVpbnQ2NF90IHRleGFzcl90OwordHlwZWRlZiB1aW50MzJfdCB0ZXhhc3J1X3Q7Cit0eXBlZGVmIHVpbnQzMl90IHRleGFzcmxfdDsKK3R5cGVkZWYgdWludHB0cl90IHRmaWFyX3Q7Cit0eXBlZGVmIHVpbnRwdHJfdCB0Zmhhcl90OworCisjZGVmaW5lIF9IVE1fU1RBVEUoQ1IwKSAoKENSMCA+PiAxKSAmIDB4MykKKyNkZWZpbmUgX0hUTV9OT05UUkFOU0FDVElPTkFMIDB4MAorI2RlZmluZSBfSFRNX1NVU1BFTkRFRCAgICAgICAgMHgxCisjZGVmaW5lIF9IVE1fVFJBTlNBQ1RJT05BTCAgICAweDIKKworI2RlZmluZSBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsQklUTlVNLFNJWkUpIFwKKyAgKCgoVEVYQVNSKSA+PiAoNjMtKEJJVE5VTSkpKSAmICgoMTw8KFNJWkUpKS0xKSkKKyNkZWZpbmUgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUixCSVROVU0sU0laRSkgXAorICAoKChURVhBU1IpID4+ICgzMS0oQklUTlVNKSkpICYgKCgxPDwoU0laRSkpLTEpKQorCisjZGVmaW5lIF9URVhBU1JfRkFJTFVSRV9DT0RFKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDcsIDgpCisjZGVmaW5lIF9URVhBU1JVX0ZBSUxVUkVfQ09ERShURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCA3LCA4KQorCisjZGVmaW5lIF9URVhBU1JfRkFJTFVSRV9QRVJTSVNURU5UKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDcsIDEpCisjZGVmaW5lIF9URVhBU1JVX0ZBSUxVUkVfUEVSU0lTVEVOVChURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCA3LCAxKQorCisjZGVmaW5lIF9URVhBU1JfRElTQUxMT1dFRChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCA4LCAxKQorI2RlZmluZSBfVEVYQVNSVV9ESVNBTExPV0VEKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDgsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9ORVNUSU5HX09WRVJGTE9XKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDksIDEpCisjZGVmaW5lIF9URVhBU1JVX05FU1RJTkdfT1ZFUkZMT1coVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgOSwgMSkKKworI2RlZmluZSBfVEVYQVNSX0ZPT1RQUklOVF9PVkVSRkxPVyhURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAxMCwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfRk9PVFBSSU5UX09WRVJGTE9XKFRFWEFTUlUpIFwKKyAgX1RFWEFTUlVfRVhUUkFDVF9CSVRTKFRFWEFTUlUsIDEwLCAxKQorCisjZGVmaW5lIF9URVhBU1JfU0VMRl9JTkRVQ0VEX0NPTkZMSUNUKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDExLCAxKQorI2RlZmluZSBfVEVYQVNSVV9TRUxGX0lORFVDRURfQ09ORkxJQ1QoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMTEsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9OT05fVFJBTlNBQ1RJT05BTF9DT05GTElDVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAxMiwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfTk9OX1RSQU5TQUNUSU9OQUxfQ09ORkxJQ1QoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMTIsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9UUkFOU0FDVElPTl9DT05GTElDVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAxMywgMSkKKyNkZWZpbmUgX1RFWEFTUlVfVFJBTlNBQ1RJT05fQ09ORkxJQ1QoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMTMsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9UUkFOU0xBVElPTl9JTlZBTElEQVRJT05fQ09ORkxJQ1QoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTQsIDEpCisjZGVmaW5lIF9URVhBU1JVX1RSQU5TTEFUSU9OX0lOVkFMSURBVElPTl9DT05GTElDVChURVhBU1JVKSBcCisgIF9URVhBU1JVX0VYVFJBQ1RfQklUUyhURVhBU1JVLCAxNCwgMSkKKworI2RlZmluZSBfVEVYQVNSX0lNUExFTUVOVEFJT05fU1BFQ0lGSUMoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgMTUsIDEpCisjZGVmaW5lIF9URVhBU1JVX0lNUExFTUVOVEFJT05fU1BFQ0lGSUMoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMTUsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9JTlNUUlVDVElPTl9GRVRDSF9DT05GTElDVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAxNiwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfSU5TVFJVQ1RJT05fRkVUQ0hfQ09ORkxJQ1QoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMTYsIDEpCisKKyNkZWZpbmUgX1RFWEFTUl9BQk9SVChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAzMSwgMSkKKyNkZWZpbmUgX1RFWEFTUlVfQUJPUlQoVEVYQVNSVSkgXAorICBfVEVYQVNSVV9FWFRSQUNUX0JJVFMoVEVYQVNSVSwgMzEsIDEpCisKKworI2RlZmluZSBfVEVYQVNSX1NVU1BFTkRFRChURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAzMiwgMSkKKworI2RlZmluZSBfVEVYQVNSX1BSSVZJTEVHRShURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAzNSwgMikKKworI2RlZmluZSBfVEVYQVNSX0ZBSUxVUkVfU1VNTUFSWShURVhBU1IpIFwKKyAgX1RFWEFTUl9FWFRSQUNUX0JJVFMoVEVYQVNSLCAzNiwgMSkKKworI2RlZmluZSBfVEVYQVNSX1RGSUFSX0VYQUNUKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDM3LCAxKQorCisjZGVmaW5lIF9URVhBU1JfUk9UKFRFWEFTUikgXAorICBfVEVYQVNSX0VYVFJBQ1RfQklUUyhURVhBU1IsIDM4LCAxKQorCisjZGVmaW5lIF9URVhBU1JfVFJBTlNBQ1RJT05fTEVWRUwoVEVYQVNSKSBcCisgIF9URVhBU1JfRVhUUkFDVF9CSVRTKFRFWEFTUiwgNjMsIDEyKQorCisjZW5kaWYgLyogX19wb3dlcnBjICovCisKKyNpZmRlZiBfX3MzOTBfXworCisvKiBDb25kaXRpb24gY29kZXMgZ2VuZXJhdGVkIGJ5IHRiZWdpbiAgKi8KKyNkZWZpbmUgX0hUTV9UQkVHSU5fU1RBUlRFRCAgICAgICAwCisjZGVmaW5lIF9IVE1fVEJFR0lOX0lOREVURVJNSU5BVEUgMQorI2RlZmluZSBfSFRNX1RCRUdJTl9UUkFOU0lFTlQgICAgIDIKKyNkZWZpbmUgX0hUTV9UQkVHSU5fUEVSU0lTVEVOVCAgICAzCisKKy8qIFRoZSBhYm9ydCBjb2RlcyBiZWxvdyB0aGlzIHRocmVzaG9sZCBhcmUgcmVzZXJ2ZWQgZm9yIG1hY2hpbmUgdXNlLiAgKi8KKyNkZWZpbmUgX0hUTV9GSVJTVF9VU0VSX0FCT1JUX0NPREUgMjU2CisKKy8qIFRoZSB0cmFuc2FjdGlvbiBkaWFnbm9zdGljIGJsb2NrIGlzIGl0IGlzIGRlZmluZWQgaW4gdGhlIFByaW5jaXBsZXMKKyAgIG9mIE9wZXJhdGlvbiBjaGFwdGVyIDUtOTEuICAqLworCitzdHJ1Y3QgX19odG1fdGRiIHsKKyAgdW5zaWduZWQgY2hhciBmb3JtYXQ7ICAgICAgICAgICAgICAgIC8qICAgMCAqLworICB1bnNpZ25lZCBjaGFyIGZsYWdzOworICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkMVs0XTsKKyAgdW5zaWduZWQgc2hvcnQgbmVzdGluZ19kZXB0aDsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGFib3J0X2NvZGU7ICAgICAgIC8qICAgOCAqLworICB1bnNpZ25lZCBsb25nIGxvbmcgY29uZmxpY3RfdG9rZW47ICAgLyogIDE2ICovCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBhdGlhOyAgICAgICAgICAgICAvKiAgMjQgKi8KKyAgdW5zaWduZWQgY2hhciBlYWlkOyAgICAgICAgICAgICAgICAgIC8qICAzMiAqLworICB1bnNpZ25lZCBjaGFyIGR4YzsKKyAgdW5zaWduZWQgY2hhciByZXNlcnZlZDJbMl07CisgIHVuc2lnbmVkIGludCBwcm9ncmFtX2ludF9pZDsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VwdGlvbl9pZDsgICAgIC8qICA0MCAqLworICB1bnNpZ25lZCBsb25nIGxvbmcgYmVhOyAgICAgICAgICAgICAgLyogIDQ4ICovCisgIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQzWzcyXTsgICAgICAgICAvKiAgNTYgKi8KKyAgdW5zaWduZWQgbG9uZyBsb25nIGdwcnNbMTZdOyAgICAgICAgIC8qIDEyOCAqLworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX2FsaWduZWRfXyAoOCkpKTsKKworCisvKiBIZWxwZXIgaW50cmluc2ljcyB0byByZXRyeSB0YmVnaW4gaW4gY2FzZSBvZiB0cmFuc2llbnQgZmFpbHVyZS4gICovCisKK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fYnVpbHRpbl90YmVnaW5fcmV0cnlfbnVsbCAoaW50IHJldHJ5KQoreworICBpbnQgY2MsIGkgPSAwOworCisgIHdoaWxlICgoY2MgPSBfX2J1aWx0aW5fdGJlZ2luKDApKSA9PSBfSFRNX1RCRUdJTl9UUkFOU0lFTlQKKyAgICAgICAgICYmIGkrKyA8IHJldHJ5KQorICAgIF9fYnVpbHRpbl90eF9hc3Npc3QoaSk7CisKKyAgcmV0dXJuIGNjOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X3RkYiAodm9pZCAqdGRiLCBpbnQgcmV0cnkpCit7CisgIGludCBjYywgaSA9IDA7CisKKyAgd2hpbGUgKChjYyA9IF9fYnVpbHRpbl90YmVnaW4odGRiKSkgPT0gX0hUTV9UQkVHSU5fVFJBTlNJRU5UCisgICAgICAgICAmJiBpKysgPCByZXRyeSkKKyAgICBfX2J1aWx0aW5fdHhfYXNzaXN0KGkpOworCisgIHJldHVybiBjYzsKK30KKworI2RlZmluZSBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5KHRkYiwgcmV0cnkpIFwKKyAgKF9fYnVpbHRpbl9jb25zdGFudF9wKHRkYiA9PSAwKSAmJiB0ZGIgPT0gMCA/IFwKKyAgIF9fYnVpbHRpbl90YmVnaW5fcmV0cnlfbnVsbChyZXRyeSkgOiBcCisgICBfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X3RkYih0ZGIsIHJldHJ5KSkKKworc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19idWlsdGluX3RiZWdpbl9yZXRyeV9ub2Zsb2F0X251bGwgKGludCByZXRyeSkKK3sKKyAgaW50IGNjLCBpID0gMDsKKworICB3aGlsZSAoKGNjID0gX19idWlsdGluX3RiZWdpbl9ub2Zsb2F0KDApKSA9PSBfSFRNX1RCRUdJTl9UUkFOU0lFTlQKKyAgICAgICAgICYmIGkrKyA8IHJldHJ5KQorICAgIF9fYnVpbHRpbl90eF9hc3Npc3QoaSk7CisKKyAgcmV0dXJuIGNjOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX2J1aWx0aW5fdGJlZ2luX3JldHJ5X25vZmxvYXRfdGRiICh2b2lkICp0ZGIsIGludCByZXRyeSkKK3sKKyAgaW50IGNjLCBpID0gMDsKKworICB3aGlsZSAoKGNjID0gX19idWlsdGluX3RiZWdpbl9ub2Zsb2F0KHRkYikpID09IF9IVE1fVEJFR0lOX1RSQU5TSUVOVAorICAgICAgICAgJiYgaSsrIDwgcmV0cnkpCisgICAgX19idWlsdGluX3R4X2Fzc2lzdChpKTsKKworICByZXR1cm4gY2M7Cit9CisKKyNkZWZpbmUgX19idWlsdGluX3RiZWdpbl9yZXRyeV9ub2Zsb2F0KHRkYiwgcmV0cnkpIFwKKyAgKF9fYnVpbHRpbl9jb25zdGFudF9wKHRkYiA9PSAwKSAmJiB0ZGIgPT0gMCA/IFwKKyAgIF9fYnVpbHRpbl90YmVnaW5fcmV0cnlfbm9mbG9hdF9udWxsKHJldHJ5KSA6IFwKKyAgIF9fYnVpbHRpbl90YmVnaW5fcmV0cnlfbm9mbG9hdF90ZGIodGRiLCByZXRyeSkpCisKKyNlbmRpZiAvKiBfX3MzOTBfXyAqLworCisjZW5kaWYgLyogX19IVE1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9odG14bGludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9odG14bGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NTcxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2h0bXhsaW50cmluLmgKQEAgLTAsMCArMSwzNjMgQEAKKy8qPT09LS0tLSBodG14bGludHJpbi5oIC0gWEwgY29tcGlsZXIgSFRNIGV4ZWN1dGlvbiBpbnRyaW5zaWNzLS0tLS0tLS0tLS0tLT09PSpcCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKK1wqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCisKKyNpZm5kZWYgX19IVE1YTElOVFJJTl9ICisjZGVmaW5lIF9fSFRNWExJTlRSSU5fSAorCisjaWZuZGVmIF9fSFRNX18KKyNlcnJvciAiSFRNIGluc3RydWN0aW9uIHNldCBub3QgZW5hYmxlZCIKKyNlbmRpZgorCisjaW5jbHVkZSA8aHRtaW50cmluLmg+CisKKyNpZmRlZiBfX3Bvd2VycGNfXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgX1RFWEFTUl9QVFIoVE1fQlVGKSBcCisgICgodGV4YXNyX3QgKikoKFRNX0JVRikrMCkpCisjZGVmaW5lIF9URVhBU1JVX1BUUihUTV9CVUYpIFwKKyAgKCh0ZXhhc3J1X3QgKikoKFRNX0JVRikrMCkpCisjZGVmaW5lIF9URVhBU1JMX1BUUihUTV9CVUYpIFwKKyAgKCh0ZXhhc3JsX3QgKikoKFRNX0JVRikrNCkpCisjZGVmaW5lIF9URklBUl9QVFIoVE1fQlVGKSBcCisgICgodGZpYXJfdCAqKSgoVE1fQlVGKSs4KSkKKwordHlwZWRlZiBjaGFyIFRNX2J1ZmZfdHlwZVsxNl07CisKKy8qIFRoaXMgbWFjcm8gY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSB0cmFuc2FjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5CisgICBzdGFydGVkIGZyb20gdGhlIF9fVE1fYmVnaW4oKSBhbmQgX19UTV9zaW1wbGVfYmVnaW4oKSBpbnRyaW5zaWMgZnVuY3Rpb25zCisgICBiZWxvdy4gICovCisjZGVmaW5lIF9IVE1fVEJFR0lOX1NUQVJURUQgICAgIDEKKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fc2ltcGxlX2JlZ2luICh2b2lkKQoreworICBpZiAoX19idWlsdGluX2V4cGVjdCAoX19idWlsdGluX3RiZWdpbiAoMCksIDEpKQorICAgIHJldHVybiBfSFRNX1RCRUdJTl9TVEFSVEVEOworICByZXR1cm4gMDsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fYmVnaW4gKHZvaWQqIGNvbnN0IFRNX2J1ZmYpCit7CisgICpfVEVYQVNSTF9QVFIgKFRNX2J1ZmYpID0gMDsKKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fYnVpbHRpbl90YmVnaW4gKDApLCAxKSkKKyAgICByZXR1cm4gX0hUTV9UQkVHSU5fU1RBUlRFRDsKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisgICpfVEVYQVNSX1BUUiAoVE1fYnVmZikgPSBfX2J1aWx0aW5fZ2V0X3RleGFzciAoKTsKKyNlbHNlCisgICpfVEVYQVNSVV9QVFIgKFRNX2J1ZmYpID0gX19idWlsdGluX2dldF90ZXhhc3J1ICgpOworICAqX1RFWEFTUkxfUFRSIChUTV9idWZmKSA9IF9fYnVpbHRpbl9nZXRfdGV4YXNyICgpOworI2VuZGlmCisgICpfVEZJQVJfUFRSIChUTV9idWZmKSA9IF9fYnVpbHRpbl9nZXRfdGZpYXIgKCk7CisgIHJldHVybiAwOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9lbmQgKHZvaWQpCit7CisgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2J1aWx0aW5fdGVuZCAoMCksIDEpKQorICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fYWJvcnQgKHZvaWQpCit7CisgIF9fYnVpbHRpbl90YWJvcnQgKDApOworfQorCitleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9uYW1lZF9hYm9ydCAodW5zaWduZWQgY2hhciBjb25zdCBjb2RlKQoreworICBfX2J1aWx0aW5fdGFib3J0IChjb2RlKTsKK30KKworZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fcmVzdW1lICh2b2lkKQoreworICBfX2J1aWx0aW5fdHJlc3VtZSAoKTsKK30KKworZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1fc3VzcGVuZCAodm9pZCkKK3sKKyAgX19idWlsdGluX3RzdXNwZW5kICgpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc191c2VyX2Fib3J0ICh2b2lkKiBjb25zdCBUTV9idWZmKQoreworICB0ZXhhc3J1X3QgdGV4YXNydSA9ICpfVEVYQVNSVV9QVFIgKFRNX2J1ZmYpOworICByZXR1cm4gX1RFWEFTUlVfQUJPUlQgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc19uYW1lZF91c2VyX2Fib3J0ICh2b2lkKiBjb25zdCBUTV9idWZmLCB1bnNpZ25lZCBjaGFyICpjb2RlKQoreworICB0ZXhhc3J1X3QgdGV4YXNydSA9ICpfVEVYQVNSVV9QVFIgKFRNX2J1ZmYpOworCisgICpjb2RlID0gX1RFWEFTUlVfRkFJTFVSRV9DT0RFICh0ZXhhc3J1KTsKKyAgcmV0dXJuIF9URVhBU1JVX0FCT1JUICh0ZXhhc3J1KTsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1faXNfaWxsZWdhbCAodm9pZCogY29uc3QgVE1fYnVmZikKK3sKKyAgdGV4YXNydV90IHRleGFzcnUgPSAqX1RFWEFTUlVfUFRSIChUTV9idWZmKTsKKyAgcmV0dXJuIF9URVhBU1JVX0RJU0FMTE9XRUQgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9pc19mb290cHJpbnRfZXhjZWVkZWQgKHZvaWQqIGNvbnN0IFRNX2J1ZmYpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoVE1fYnVmZik7CisgIHJldHVybiBfVEVYQVNSVV9GT09UUFJJTlRfT1ZFUkZMT1cgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9uZXN0aW5nX2RlcHRoICh2b2lkKiBjb25zdCBUTV9idWZmKQoreworICB0ZXhhc3JsX3QgdGV4YXNybDsKKworICBpZiAoX0hUTV9TVEFURSAoX19idWlsdGluX3R0ZXN0ICgpKSA9PSBfSFRNX05PTlRSQU5TQUNUSU9OQUwpCisgICAgeworICAgICAgdGV4YXNybCA9ICpfVEVYQVNSTF9QVFIgKFRNX2J1ZmYpOworICAgICAgaWYgKCFfVEVYQVNSX0ZBSUxVUkVfU1VNTUFSWSAodGV4YXNybCkpCisgICAgICAgIHRleGFzcmwgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHRleGFzcmwgPSAodGV4YXNybF90KSBfX2J1aWx0aW5fZ2V0X3RleGFzciAoKTsKKworICByZXR1cm4gX1RFWEFTUl9UUkFOU0FDVElPTl9MRVZFTCAodGV4YXNybCk7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2lzX25lc3RlZF90b29fZGVlcCh2b2lkKiBjb25zdCBUTV9idWZmKQoreworICB0ZXhhc3J1X3QgdGV4YXNydSA9ICpfVEVYQVNSVV9QVFIgKFRNX2J1ZmYpOworICByZXR1cm4gX1RFWEFTUlVfTkVTVElOR19PVkVSRkxPVyAodGV4YXNydSk7Cit9CisKK2V4dGVybiBfX2lubGluZSBsb25nCitfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18sIF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCitfX1RNX2lzX2NvbmZsaWN0KHZvaWQqIGNvbnN0IFRNX2J1ZmYpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoVE1fYnVmZik7CisgIC8qIFJldHVybiBURVhBU1IgYml0cyAxMSAoU2VsZi1JbmR1Y2VkIENvbmZsaWN0KSB0aHJvdWdoCisgICAgIDE0IChUcmFuc2xhdGlvbiBJbnZhbGlkYXRpb24gQ29uZmxpY3QpLiAgKi8KKyAgcmV0dXJuIChfVEVYQVNSVV9FWFRSQUNUX0JJVFMgKHRleGFzcnUsIDE0LCA0KSkgPyAxIDogMDsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcKK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXywgX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK19fVE1faXNfZmFpbHVyZV9wZXJzaXN0ZW50KHZvaWQqIGNvbnN0IFRNX2J1ZmYpCit7CisgIHRleGFzcnVfdCB0ZXhhc3J1ID0gKl9URVhBU1JVX1BUUiAoVE1fYnVmZik7CisgIHJldHVybiBfVEVYQVNSVV9GQUlMVVJFX1BFUlNJU1RFTlQgKHRleGFzcnUpOworfQorCitleHRlcm4gX19pbmxpbmUgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9mYWlsdXJlX2FkZHJlc3Modm9pZCogY29uc3QgVE1fYnVmZikKK3sKKyAgcmV0dXJuICpfVEZJQVJfUFRSIChUTV9idWZmKTsKK30KKworZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZworX19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fLCBfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorX19UTV9mYWlsdXJlX2NvZGUodm9pZCogY29uc3QgVE1fYnVmZikKK3sKKyAgcmV0dXJuICpfVEVYQVNSX1BUUiAoVE1fYnVmZik7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX3Bvd2VycGNfXyAqLworCisjaWZkZWYgX19zMzkwX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisvKiBUaGVzZSBpbnRyaW5zaWNzIGFyZSBiZWluZyBtYWRlIGF2YWlsYWJsZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICB0aGUgSUJNIFhMIGNvbXBpbGVyLiAgRm9yIGRvY3VtZW50YXRpb24gcGxlYXNlIHNlZSB0aGUgInovT1MgWEwKKyAgIEMvQysrIFByb2dyYW1taW5nIEd1aWRlIiBwdWJsaWNhbGx5IGF2YWlsYWJsZSBvbiB0aGUgd2ViLiAgKi8KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fc2ltcGxlX2JlZ2luICgpCit7CisgIHJldHVybiBfX2J1aWx0aW5fdGJlZ2luX25vZmxvYXQgKDApOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9iZWdpbiAodm9pZCogY29uc3QgdGRiKQoreworICByZXR1cm4gX19idWlsdGluX3RiZWdpbl9ub2Zsb2F0ICh0ZGIpOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9lbmQgKCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl90ZW5kICgpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCitfX1RNX2Fib3J0ICgpCit7CisgIHJldHVybiBfX2J1aWx0aW5fdGFib3J0IChfSFRNX0ZJUlNUX1VTRVJfQUJPUlRfQ09ERSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX25hbWVkX2Fib3J0ICh1bnNpZ25lZCBjaGFyIGNvbnN0IGNvZGUpCit7CisgIHJldHVybiBfX2J1aWx0aW5fdGFib3J0ICgoaW50KV9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFICsgY29kZSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX25vbl90cmFuc2FjdGlvbmFsX3N0b3JlICh2b2lkKiBjb25zdCBhZGRyLCBsb25nIGxvbmcgY29uc3QgdmFsdWUpCit7CisgIF9fYnVpbHRpbl9ub25fdHhfc3RvcmUgKCh1aW50NjRfdCopYWRkciwgKHVpbnQ2NF90KXZhbHVlKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fbmVzdGluZ19kZXB0aCAodm9pZCogY29uc3QgdGRiX3B0cikKK3sKKyAgaW50IGRlcHRoID0gX19idWlsdGluX3R4X25lc3RpbmdfZGVwdGggKCk7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKil0ZGJfcHRyOworCisgIGlmIChkZXB0aCAhPSAwKQorICAgIHJldHVybiBkZXB0aDsKKworICBpZiAodGRiLT5mb3JtYXQgIT0gMSkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIHRkYi0+bmVzdGluZ19kZXB0aDsKK30KKworLyogVHJhbnNhY3Rpb24gZmFpbHVyZSBkaWFnbm9zdGljcyAqLworCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9pc191c2VyX2Fib3J0ICh2b2lkKiBjb25zdCB0ZGJfcHRyKQoreworICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopdGRiX3B0cjsKKworICBpZiAodGRiLT5mb3JtYXQgIT0gMSkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gISEodGRiLT5hYm9ydF9jb2RlID49IF9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1faXNfbmFtZWRfdXNlcl9hYm9ydCAodm9pZCogY29uc3QgdGRiX3B0ciwgdW5zaWduZWQgY2hhciogY29kZSkKK3sKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKXRkYl9wdHI7CisKKyAgaWYgKHRkYi0+Zm9ybWF0ICE9IDEpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHRkYi0+YWJvcnRfY29kZSA+PSBfSFRNX0ZJUlNUX1VTRVJfQUJPUlRfQ09ERSkKKyAgICB7CisgICAgICAqY29kZSA9IHRkYi0+YWJvcnRfY29kZSAtIF9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1faXNfaWxsZWdhbCAodm9pZCogY29uc3QgdGRiX3B0cikKK3sKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKXRkYl9wdHI7CisKKyAgcmV0dXJuICh0ZGItPmZvcm1hdCA9PSAxCisJICAmJiAodGRiLT5hYm9ydF9jb2RlID09IDQgLyogdW5maWx0ZXJlZCBwcm9ncmFtIGludGVycnVwdGlvbiAqLworCSAgICAgIHx8IHRkYi0+YWJvcnRfY29kZSA9PSAxMSAvKiByZXN0cmljdGVkIGluc3RydWN0aW9uICovKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2lzX2Zvb3RwcmludF9leGNlZWRlZCAodm9pZCogY29uc3QgdGRiX3B0cikKK3sKKyAgc3RydWN0IF9faHRtX3RkYiAqdGRiID0gKHN0cnVjdCBfX2h0bV90ZGIqKXRkYl9wdHI7CisKKyAgcmV0dXJuICh0ZGItPmZvcm1hdCA9PSAxCisJICAmJiAodGRiLT5hYm9ydF9jb2RlID09IDcgLyogZmV0Y2ggb3ZlcmZsb3cgKi8KKwkgICAgICB8fCB0ZGItPmFib3J0X2NvZGUgPT0gOCAvKiBzdG9yZSBvdmVyZmxvdyAqLykpOworfQorCitzdGF0aWMgX19pbmxpbmUgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX19UTV9pc19uZXN0ZWRfdG9vX2RlZXAgKHZvaWQqIGNvbnN0IHRkYl9wdHIpCit7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKil0ZGJfcHRyOworCisgIHJldHVybiB0ZGItPmZvcm1hdCA9PSAxICYmIHRkYi0+YWJvcnRfY29kZSA9PSAxMzsgLyogZGVwdGggZXhjZWVkZWQgKi8KK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1faXNfY29uZmxpY3QgKHZvaWQqIGNvbnN0IHRkYl9wdHIpCit7CisgIHN0cnVjdCBfX2h0bV90ZGIgKnRkYiA9IChzdHJ1Y3QgX19odG1fdGRiKil0ZGJfcHRyOworCisgIHJldHVybiAodGRiLT5mb3JtYXQgPT0gMQorCSAgJiYgKHRkYi0+YWJvcnRfY29kZSA9PSA5IC8qIGZldGNoIGNvbmZsaWN0ICovCisJICAgICAgfHwgdGRiLT5hYm9ydF9jb2RlID09IDEwIC8qIHN0b3JlIGNvbmZsaWN0ICovKSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX1RNX2lzX2ZhaWx1cmVfcGVyc2lzdGVudCAobG9uZyBjb25zdCByZXN1bHQpCit7CisgIHJldHVybiByZXN1bHQgPT0gX0hUTV9UQkVHSU5fUEVSU0lTVEVOVDsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fZmFpbHVyZV9hZGRyZXNzICh2b2lkKiBjb25zdCB0ZGJfcHRyKQoreworICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopdGRiX3B0cjsKKyAgcmV0dXJuIHRkYi0+YXRpYTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fVE1fZmFpbHVyZV9jb2RlICh2b2lkKiBjb25zdCB0ZGJfcHRyKQoreworICBzdHJ1Y3QgX19odG1fdGRiICp0ZGIgPSAoc3RydWN0IF9faHRtX3RkYiopdGRiX3B0cjsKKworICByZXR1cm4gdGRiLT5hYm9ydF9jb2RlOworfQorCisjZW5kaWYgLyogX19zMzkwX18gKi8KKworI2VuZGlmIC8qIF9fSFRNWExJTlRSSU5fSCAgKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaWEzMmludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pYTMyaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkZjNmMQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaWEzMmludHJpbi5oCkBAIC0wLDAgKzEsMTAxIEBACisvKiA9PT0tLS0tLS0tLSBpYTMyaW50cmluLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fWDg2SU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxpYTMyaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0lBMzJJTlRSSU5fSAorI2RlZmluZSBfX0lBMzJJTlRSSU5fSAorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JlYWRlZmxhZ3Modm9pZCkKK3sKKyAgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0gMDsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwdXNoZlxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAicG9wcSAlMFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgOiI9ciIoX19yZXMpCisgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICk7CisgIHJldHVybiBfX3JlczsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX193cml0ZWVmbGFncyh1bnNpZ25lZCBsb25nIGxvbmcgX19mKQoreworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInB1c2hxICUwXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3BmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgICAgICAgICA6InIiKF9fZikKKyAgICAgICAgICAgICAgICAgICAgICAgIDoiZmxhZ3MiCisgICAgICAgICAgICAgICAgICAgICAgICk7Cit9CisKKyNlbHNlIC8qICFfX3g4Nl82NF9fICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmVhZGVmbGFncyh2b2lkKQoreworICB1bnNpZ25lZCBpbnQgX19yZXMgPSAwOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInB1c2hmXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3BsICUwXG4iCisgICAgICAgICAgICAgICAgICAgICAgICA6Ij1yIihfX3JlcykKKyAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgcmV0dXJuIF9fcmVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3dyaXRlZWZsYWdzKHVuc2lnbmVkIGludCBfX2YpCit7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgicHVzaGwgJTBcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAgInBvcGZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIDoiciIoX19mKQorICAgICAgICAgICAgICAgICAgICAgICAgOiJmbGFncyIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKK30KKyNlbmRpZiAvKiAhX194ODZfNjRfXyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmRwbWMoaW50IF9fQSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRwbWMoX19BKTsKK30KKworLyogX19yZHRzYyAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfX3JkdHNjKHZvaWQpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkdHNjKCk7Cit9CisKKy8qIF9fcmR0c2NwICovCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fKSkKK19fcmR0c2NwKHVuc2lnbmVkIGludCAqX19BKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHRzY3AoX19BKTsKK30KKworI2RlZmluZSBfcmR0c2MoKSBfX3JkdHNjKCkKKworI2VuZGlmIC8qIF9fSUEzMklOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ltbWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2M2ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pbW1pbnRyaW4uaApAQCAtMCwwICsxLDE3MiBAQAorLyo9PT0tLS0tIGltbWludHJpbi5oIC0gSW50ZWwgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZGVmaW5lIF9fSU1NSU5UUklOX0gKKworI2luY2x1ZGUgPG1taW50cmluLmg+CisKKyNpbmNsdWRlIDx4bW1pbnRyaW4uaD4KKworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorCisjaW5jbHVkZSA8cG1taW50cmluLmg+CisKKyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKworI2luY2x1ZGUgPHNtbWludHJpbi5oPgorCisjaW5jbHVkZSA8d21taW50cmluLmg+CisKKyNpbmNsdWRlIDxhdnhpbnRyaW4uaD4KKworI2luY2x1ZGUgPGF2eDJpbnRyaW4uaD4KKworLyogVGhlIDI1Ni1iaXQgdmVyc2lvbnMgb2YgZnVuY3Rpb25zIGluIGYxNmNpbnRyaW4uaC4KKyAgIEludGVsIGRvY3VtZW50cyB0aGVzZSBhcyBiZWluZyBpbiBpbW1pbnRyaW4uaCwgYW5kCisgICB0aGV5IGRlcGVuZCBvbiB0eXBlZGVmcyBmcm9tIGF2eGludHJpbi5oLiAqLworCisjZGVmaW5lIF9tbTI1Nl9jdnRwc19waChhLCBpbW0pIF9fZXh0ZW5zaW9uX18gKHsgXAorIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZjdnRwczJwaDI1NigoX192OHNmKShfX20yNTYpKGEpLCAoaW1tKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZSBfX20yNTYgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmMTZjIikpKQorX21tMjU2X2N2dHBoX3BzKF9fbTEyOGkgX19hKQoreworICByZXR1cm4gKF9fbTI1NilfX2J1aWx0aW5faWEzMl92Y3Z0cGgycHMyNTYoKF9fdjhoaSlfX2EpOworfQorCisjaW5jbHVkZSA8Ym1paW50cmluLmg+CisKKyNpbmNsdWRlIDxibWkyaW50cmluLmg+CisKKyNpbmNsdWRlIDxsemNudGludHJpbi5oPgorCisjaW5jbHVkZSA8Zm1haW50cmluLmg+CisKKyNpbmNsdWRlIDxhdng1MTJmaW50cmluLmg+CisKKyNpbmNsdWRlIDxhdng1MTJ2bGludHJpbi5oPgorCisjaW5jbHVkZSA8YXZ4NTEyYndpbnRyaW4uaD4KKworI2luY2x1ZGUgPGF2eDUxMmNkaW50cmluLmg+CisKKyNpbmNsdWRlIDxhdng1MTJkcWludHJpbi5oPgorCisjaW5jbHVkZSA8YXZ4NTEydmxid2ludHJpbi5oPgorCisjaW5jbHVkZSA8YXZ4NTEydmxkcWludHJpbi5oPgorCisjaW5jbHVkZSA8YXZ4NTEyZXJpbnRyaW4uaD4KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicmRybmQiKSkpCitfcmRyYW5kMTZfc3RlcCh1bnNpZ25lZCBzaG9ydCAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRyYW5kMTZfc3RlcChfX3ApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJyZHJuZCIpKSkKK19yZHJhbmQzMl9zdGVwKHVuc2lnbmVkIGludCAqX19wKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmRyYW5kMzJfc3RlcChfX3ApOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicmRybmQiKSkpCitfcmRyYW5kNjRfc3RlcCh1bnNpZ25lZCBsb25nIGxvbmcgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkcmFuZDY0X3N0ZXAoX19wKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfcmVhZGZzYmFzZV91MzIodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkZnNiYXNlMzIoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfcmVhZGZzYmFzZV91NjQodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkZnNiYXNlNjQoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfcmVhZGdzYmFzZV91MzIodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkZ3NiYXNlMzIoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfcmVhZGdzYmFzZV91NjQodm9pZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JkZ3NiYXNlNjQoKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3dyaXRlZnNiYXNlX3UzMih1bnNpZ25lZCBpbnQgX19WKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfd3Jmc2Jhc2UzMihfX1YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygiZnNnc2Jhc2UiKSkpCitfd3JpdGVmc2Jhc2VfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl93cmZzYmFzZTY0KF9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJmc2dzYmFzZSIpKSkKK193cml0ZWdzYmFzZV91MzIodW5zaWduZWQgaW50IF9fVikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3dyZ3NiYXNlMzIoX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oImZzZ3NiYXNlIikpKQorX3dyaXRlZ3NiYXNlX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19WKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfd3Jnc2Jhc2U2NChfX1YpOworfQorI2VuZGlmCisKKyNpbmNsdWRlIDxydG1pbnRyaW4uaD4KKworI2luY2x1ZGUgPHh0ZXN0aW50cmluLmg+CisKKyNpbmNsdWRlIDxzaGFpbnRyaW4uaD4KKworI2luY2x1ZGUgPGZ4c3JpbnRyaW4uaD4KKworI2luY2x1ZGUgPHhzYXZlaW50cmluLmg+CisKKyNpbmNsdWRlIDx4c2F2ZW9wdGludHJpbi5oPgorCisjaW5jbHVkZSA8eHNhdmVjaW50cmluLmg+CisKKyNpbmNsdWRlIDx4c2F2ZXNpbnRyaW4uaD4KKworLyogU29tZSBpbnRyaW5zaWNzIGluc2lkZSBhZHhpbnRyaW4uaCBhcmUgYXZhaWxhYmxlIG9ubHkgb24gcHJvY2Vzc29ycyB3aXRoIEFEWCwKKyAqIHdoZXJlYXMgb3RoZXJzIGFyZSBhbHNvIGF2YWlsYWJsZSBhdCBhbGwgdGltZXMuICovCisjaW5jbHVkZSA8YWR4aW50cmluLmg+CisKKyNlbmRpZiAvKiBfX0lNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ludHR5cGVzLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2ludHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1OWQxNAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvaW50dHlwZXMuaApAQCAtMCwwICsxLDEwMiBAQAorLyo9PT0tLS0tIGludHR5cGVzLmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIGludGVnZXIgcHJpbnRmIG1hY3JvcyAtLS0tLS0tLS0tPT09KlwKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KKworI2lmbmRlZiBfX0NMQU5HX0lOVFRZUEVTX0gKKyNkZWZpbmUgX19DTEFOR19JTlRUWVBFU19ICisKKyNpbmNsdWRlX25leHQgPGludHR5cGVzLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5MDAKKy8qIE1TVkMgaGVhZGVycyBkZWZpbmUgaW50MzJfdCBhcyBpbnQsIGJ1dCBQUkl4MzIgYXMgImx4IiBpbnN0ZWFkIG9mICJ4Ii4KKyAqIFRoaXMgdHJpZ2dlcnMgZm9ybWF0IHdhcm5pbmdzLCBzbyBmaXggaXQgdXAgaGVyZS4gKi8KKyN1bmRlZiBQUklkMzIKKyN1bmRlZiBQUklkTEVBU1QzMgorI3VuZGVmIFBSSWRGQVNUMzIKKyN1bmRlZiBQUklpMzIKKyN1bmRlZiBQUklpTEVBU1QzMgorI3VuZGVmIFBSSWlGQVNUMzIKKyN1bmRlZiBQUklvMzIKKyN1bmRlZiBQUklvTEVBU1QzMgorI3VuZGVmIFBSSW9GQVNUMzIKKyN1bmRlZiBQUkl1MzIKKyN1bmRlZiBQUkl1TEVBU1QzMgorI3VuZGVmIFBSSXVGQVNUMzIKKyN1bmRlZiBQUkl4MzIKKyN1bmRlZiBQUkl4TEVBU1QzMgorI3VuZGVmIFBSSXhGQVNUMzIKKyN1bmRlZiBQUklYMzIKKyN1bmRlZiBQUklYTEVBU1QzMgorI3VuZGVmIFBSSVhGQVNUMzIKKworI3VuZGVmIFNDTmQzMgorI3VuZGVmIFNDTmRMRUFTVDMyCisjdW5kZWYgU0NOZEZBU1QzMgorI3VuZGVmIFNDTmkzMgorI3VuZGVmIFNDTmlMRUFTVDMyCisjdW5kZWYgU0NOaUZBU1QzMgorI3VuZGVmIFNDTm8zMgorI3VuZGVmIFNDTm9MRUFTVDMyCisjdW5kZWYgU0NOb0ZBU1QzMgorI3VuZGVmIFNDTnUzMgorI3VuZGVmIFNDTnVMRUFTVDMyCisjdW5kZWYgU0NOdUZBU1QzMgorI3VuZGVmIFNDTngzMgorI3VuZGVmIFNDTnhMRUFTVDMyCisjdW5kZWYgU0NOeEZBU1QzMgorCisjZGVmaW5lIFBSSWQzMiAiZCIKKyNkZWZpbmUgUFJJZExFQVNUMzIgImQiCisjZGVmaW5lIFBSSWRGQVNUMzIgImQiCisjZGVmaW5lIFBSSWkzMiAiaSIKKyNkZWZpbmUgUFJJaUxFQVNUMzIgImkiCisjZGVmaW5lIFBSSWlGQVNUMzIgImkiCisjZGVmaW5lIFBSSW8zMiAibyIKKyNkZWZpbmUgUFJJb0xFQVNUMzIgIm8iCisjZGVmaW5lIFBSSW9GQVNUMzIgIm8iCisjZGVmaW5lIFBSSXUzMiAidSIKKyNkZWZpbmUgUFJJdUxFQVNUMzIgInUiCisjZGVmaW5lIFBSSXVGQVNUMzIgInUiCisjZGVmaW5lIFBSSXgzMiAieCIKKyNkZWZpbmUgUFJJeExFQVNUMzIgIngiCisjZGVmaW5lIFBSSXhGQVNUMzIgIngiCisjZGVmaW5lIFBSSVgzMiAiWCIKKyNkZWZpbmUgUFJJWExFQVNUMzIgIlgiCisjZGVmaW5lIFBSSVhGQVNUMzIgIlgiCisKKyNkZWZpbmUgU0NOZDMyICJkIgorI2RlZmluZSBTQ05kTEVBU1QzMiAiZCIKKyNkZWZpbmUgU0NOZEZBU1QzMiAiZCIKKyNkZWZpbmUgU0NOaTMyICJpIgorI2RlZmluZSBTQ05pTEVBU1QzMiAiaSIKKyNkZWZpbmUgU0NOaUZBU1QzMiAiaSIKKyNkZWZpbmUgU0NObzMyICJvIgorI2RlZmluZSBTQ05vTEVBU1QzMiAibyIKKyNkZWZpbmUgU0NOb0ZBU1QzMiAibyIKKyNkZWZpbmUgU0NOdTMyICJ1IgorI2RlZmluZSBTQ051TEVBU1QzMiAidSIKKyNkZWZpbmUgU0NOdUZBU1QzMiAidSIKKyNkZWZpbmUgU0NOeDMyICJ4IgorI2RlZmluZSBTQ054TEVBU1QzMiAieCIKKyNkZWZpbmUgU0NOeEZBU1QzMiAieCIKKyNlbmRpZgorCisjZW5kaWYgLyogX19DTEFOR19JTlRUWVBFU19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2lzbzY0Ni5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pc282NDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ExM2M1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9pc282NDYuaApAQCAtMCwwICsxLDQzIEBACisvKj09PS0tLS0gaXNvNjQ2LmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIGFsdGVybmF0ZSBzcGVsbGluZ3Mgb2Ygb3BlcmF0b3JzLS0tPT09CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVsaSBGcmllZG1hbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lTTzY0Nl9ICisjZGVmaW5lIF9fSVNPNjQ2X0gKKworI2lmbmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBhbmQgICAgJiYKKyNkZWZpbmUgYW5kX2VxICY9CisjZGVmaW5lIGJpdGFuZCAmCisjZGVmaW5lIGJpdG9yICB8CisjZGVmaW5lIGNvbXBsICB+CisjZGVmaW5lIG5vdCAgICAhCisjZGVmaW5lIG5vdF9lcSAhPQorI2RlZmluZSBvciAgICAgfHwKKyNkZWZpbmUgb3JfZXEgIHw9CisjZGVmaW5lIHhvciAgICBeCisjZGVmaW5lIHhvcl9lcSBePQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0lTTzY0Nl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2xpbWl0cy5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQxODdjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9saW1pdHMuaApAQCAtMCwwICsxLDExOCBAQAorLyo9PT0tLS0tIGxpbWl0cy5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciBpbnRlZ2VyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tPT09KlwKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ2hyaXMgTGF0dG5lcgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCitcKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0qLworCisjaWZuZGVmIF9fQ0xBTkdfTElNSVRTX0gKKyNkZWZpbmUgX19DTEFOR19MSU1JVFNfSAorCisvKiBUaGUgc3lzdGVtJ3MgbGltaXRzLmggbWF5LCBpbiB0dXJuLCB0cnkgdG8gI2luY2x1ZGVfbmV4dCBHQ0MncyBsaW1pdHMuaC4KKyAgIEF2ZXJ0IHRoaXMgI2luY2x1ZGVfbmV4dCBtYWRuZXNzLiAqLworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQgX0dDQ19MSU1JVFNfSF8KKyNkZWZpbmUgX0dDQ19MSU1JVFNfSF8KKyNlbmRpZgorCisvKiBTeXN0ZW0gaGVhZGVycyBpbmNsdWRlIGEgbnVtYmVyIG9mIGNvbnN0YW50cyBmcm9tIFBPU0lYIGluIDxsaW1pdHMuaD4uCisgICBJbmNsdWRlIGl0IGlmIHdlJ3JlIGhvc3RlZC4gKi8KKyNpZiBfX1NURENfSE9TVEVEX18gJiYgX19oYXNfaW5jbHVkZV9uZXh0KDxsaW1pdHMuaD4pCisjaW5jbHVkZV9uZXh0IDxsaW1pdHMuaD4KKyNlbmRpZgorCisvKiBNYW55IHN5c3RlbSBoZWFkZXJzIHRyeSB0byAiaGVscCB1cyBvdXQiIGJ5IGRlZmluaW5nIHRoZXNlLiAgTm8gcmVhbGx5LCB3ZQorICAga25vdyBob3cgYmlnIGVhY2ggZGF0YXR5cGUgaXMuICovCisjdW5kZWYgIFNDSEFSX01JTgorI3VuZGVmICBTQ0hBUl9NQVgKKyN1bmRlZiAgVUNIQVJfTUFYCisjdW5kZWYgIFNIUlRfTUlOCisjdW5kZWYgIFNIUlRfTUFYCisjdW5kZWYgIFVTSFJUX01BWAorI3VuZGVmICBJTlRfTUlOCisjdW5kZWYgIElOVF9NQVgKKyN1bmRlZiAgVUlOVF9NQVgKKyN1bmRlZiAgTE9OR19NSU4KKyN1bmRlZiAgTE9OR19NQVgKKyN1bmRlZiAgVUxPTkdfTUFYCisKKyN1bmRlZiAgQ0hBUl9CSVQKKyN1bmRlZiAgQ0hBUl9NSU4KKyN1bmRlZiAgQ0hBUl9NQVgKKworLyogQzkwLzk5IDUuMi40LjIuMSAqLworI2RlZmluZSBTQ0hBUl9NQVggX19TQ0hBUl9NQVhfXworI2RlZmluZSBTSFJUX01BWCAgX19TSFJUX01BWF9fCisjZGVmaW5lIElOVF9NQVggICBfX0lOVF9NQVhfXworI2RlZmluZSBMT05HX01BWCAgX19MT05HX01BWF9fCisKKyNkZWZpbmUgU0NIQVJfTUlOICgtX19TQ0hBUl9NQVhfXy0xKQorI2RlZmluZSBTSFJUX01JTiAgKC1fX1NIUlRfTUFYX18gLTEpCisjZGVmaW5lIElOVF9NSU4gICAoLV9fSU5UX01BWF9fICAtMSkKKyNkZWZpbmUgTE9OR19NSU4gICgtX19MT05HX01BWF9fIC0xTCkKKworI2RlZmluZSBVQ0hBUl9NQVggKF9fU0NIQVJfTUFYX18qMiAgKzEpCisjZGVmaW5lIFVTSFJUX01BWCAoX19TSFJUX01BWF9fICoyICArMSkKKyNkZWZpbmUgVUlOVF9NQVggIChfX0lOVF9NQVhfXyAgKjJVICsxVSkKKyNkZWZpbmUgVUxPTkdfTUFYIChfX0xPTkdfTUFYX18gKjJVTCsxVUwpCisKKyNpZm5kZWYgTUJfTEVOX01BWAorI2RlZmluZSBNQl9MRU5fTUFYIDEKKyNlbmRpZgorCisjZGVmaW5lIENIQVJfQklUICBfX0NIQVJfQklUX18KKworI2lmZGVmIF9fQ0hBUl9VTlNJR05FRF9fICAvKiAtZnVuc2lnbmVkLWNoYXIgKi8KKyNkZWZpbmUgQ0hBUl9NSU4gMAorI2RlZmluZSBDSEFSX01BWCBVQ0hBUl9NQVgKKyNlbHNlCisjZGVmaW5lIENIQVJfTUlOIFNDSEFSX01JTgorI2RlZmluZSBDSEFSX01BWCBfX1NDSEFSX01BWF9fCisjZW5kaWYKKworLyogQzk5IDUuMi40LjIuMTogQWRkZWQgbG9uZyBsb25nLgorICAgQysrMTEgMTguMy4zLjI6IHNhbWUgY29udGVudHMgYXMgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgPGxpbWl0cy5oPi4KKyAqLworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKKyN1bmRlZiAgTExPTkdfTUlOCisjdW5kZWYgIExMT05HX01BWAorI3VuZGVmICBVTExPTkdfTUFYCisKKyNkZWZpbmUgTExPTkdfTUFYICBfX0xPTkdfTE9OR19NQVhfXworI2RlZmluZSBMTE9OR19NSU4gICgtX19MT05HX0xPTkdfTUFYX18tMUxMKQorI2RlZmluZSBVTExPTkdfTUFYIChfX0xPTkdfTE9OR19NQVhfXyoyVUxMKzFVTEwpCisjZW5kaWYKKworLyogTE9OR19MT05HX01JTi9MT05HX0xPTkdfTUFYL1VMT05HX0xPTkdfTUFYIGFyZSBhIEdOVSBleHRlbnNpb24uICBJdCdzIHRvbyBiYWQKKyAgIHRoYXQgd2UgZG9uJ3QgaGF2ZSBzb21ldGhpbmcgbGlrZSAjcHJhZ21hIHBvaXNvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG8KKyAgIGRlcHJlY2F0ZSBhIG1hY3JvIC0gdGhlIGNvZGUgc2hvdWxkIGp1c3QgdXNlIExMT05HX01BWCBhbmQgZnJpZW5kcy4KKyAqLworI2lmIGRlZmluZWQoX19HTlVfTElCUkFSWV9fKSA/IGRlZmluZWQoX19VU0VfR05VKSA6ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKworI3VuZGVmICAgTE9OR19MT05HX01JTgorI3VuZGVmICAgTE9OR19MT05HX01BWAorI3VuZGVmICAgVUxPTkdfTE9OR19NQVgKKworI2RlZmluZSBMT05HX0xPTkdfTUFYICBfX0xPTkdfTE9OR19NQVhfXworI2RlZmluZSBMT05HX0xPTkdfTUlOICAoLV9fTE9OR19MT05HX01BWF9fLTFMTCkKKyNkZWZpbmUgVUxPTkdfTE9OR19NQVggKF9fTE9OR19MT05HX01BWF9fKjJVTEwrMVVMTCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19DTEFOR19MSU1JVFNfSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9semNudGludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9semNudGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDBlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL2x6Y250aW50cmluLmgKQEAgLTAsMCArMSw2OCBAQAorLyo9PT0tLS0tIGx6Y250aW50cmluLmggLSBMWkNOVCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmICFkZWZpbmVkIF9fWDg2SU5UUklOX0ggJiYgIWRlZmluZWQgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPGx6Y250aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX0xaQ05USU5UUklOX0gKKyNkZWZpbmUgX19MWkNOVElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygibHpjbnQiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IF9fREVGQVVMVF9GTl9BVFRSUworX19semNudDE2KHVuc2lnbmVkIHNob3J0IF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jbHpzKF9fWCkgOiAxNjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19semNudDMyKHVuc2lnbmVkIGludCBfX1gpCit7CisgIHJldHVybiBfX1ggPyBfX2J1aWx0aW5fY2x6KF9fWCkgOiAzMjsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX2x6Y250X3UzMih1bnNpZ25lZCBpbnQgX19YKQoreworICByZXR1cm4gX19YID8gX19idWlsdGluX2NseihfX1gpIDogMzI7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2x6Y250NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jbHpsbChfX1gpIDogNjQ7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19semNudF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fWCkKK3sKKyAgcmV0dXJuIF9fWCA/IF9fYnVpbHRpbl9jbHpsbChfX1gpIDogNjQ7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19MWkNOVElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21tM2Rub3cuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW0zZG5vdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTNmYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21tM2Rub3cuaApAQCAtMCwwICsxLDE3MSBAQAorLyo9PT0tLS0tIG1tM2Rub3cuaCAtIDNETm93ISBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfTU0zRE5PV19IX0lOQ0xVREVECisjZGVmaW5lIF9NTTNETk9XX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPG1taW50cmluLmg+CisjaW5jbHVkZSA8cHJmY2h3aW50cmluLmg+CisKK3R5cGVkZWYgZmxvYXQgX192MnNmIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOworCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oIjNkbm93IikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21fZmVtbXMoKSB7CisgIF9fYnVpbHRpbl9pYTMyX2ZlbW1zKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGF2Z3VzYihfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGF2Z3VzYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGYyaWQoX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGYyaWQoKF9fdjJzZilfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmYWNjKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmFjYygoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZhZGQoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmYWRkKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZmNtcGVxKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGVxKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZmNtcGdlKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGdlKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZmNtcGd0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZmNtcGd0KChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZm1heChfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZtYXgoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmbWluKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZm1pbigoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZtdWwoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmbXVsKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZnJjcChfX202NCBfX20pIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnJjcCgoX192MnNmKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZyY3BpdDEoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcmNwaXQxKChfX3Yyc2YpX19tMSwgKF9fdjJzZilfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZnJjcGl0MihfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyY3BpdDIoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmcnNxcnQoX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyc3FydCgoX192MnNmKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZyc3FydGl0MShfX202NCBfX20xLCBfX202NCBfX20yKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGZyc3FpdDEoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3Bmc3ViKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnN1YigoX192MnNmKV9fbTEsIChfX3Yyc2YpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZzdWJyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZnN1YnIoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BpMmZkKF9fbTY0IF9fbSkgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BpMmZkKChfX3Yyc2kpX19tKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wbXVsaHJ3KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbXVsaHJ3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworLyogSGFuZGxlIHRoZSAzZG5vd2EgaW5zdHJ1Y3Rpb25zIGhlcmUuICovCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oIjNkbm93YSIpKSkKKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wZjJpdyhfX202NCBfX20pIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZjJpdygoX192MnNmKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcGZuYWNjKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wZm5hY2MoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BmcG5hY2MoX19tNjQgX19tMSwgX19tNjQgX19tMikgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BmcG5hY2MoKF9fdjJzZilfX20xLCAoX192MnNmKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tX3BpMmZ3KF9fbTY0IF9fbSkgeworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BpMmZ3KChfX3Yyc2kpX19tKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbV9wc3dhcGRzZihfX202NCBfX20pIHsKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3dhcGRzZigoX192MnNmKV9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21fcHN3YXBkc2koX19tNjQgX19tKSB7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN3YXBkc2koKF9fdjJzaSlfX20pOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9tbV9tYWxsb2MuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW1fbWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1YWZkMwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW1fbWFsbG9jLmgKQEAgLTAsMCArMSw3NSBAQAorLyo9PT0tLS0tIG1tX21hbGxvYy5oIC0gQWxsb2NhdGluZyBhbmQgRnJlZWluZyBBbGlnbmVkIE1lbW9yeSBCbG9ja3MgLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX01NX01BTExPQ19ICisjZGVmaW5lIF9fTU1fTUFMTE9DX0gKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZWxzZQorI2lmbmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbih2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSk7CisjZWxzZQorLy8gU29tZSBzeXN0ZW1zIChlLmcuIHRob3NlIHdpdGggR05VIGxpYmMpIGRlY2xhcmUgcG9zaXhfbWVtYWxpZ24gd2l0aCBhbgorLy8gZXhjZXB0aW9uIHNwZWNpZmllci4gVmlhIGFuICJlZ3JlZ2lvdXMgd29ya2Fyb3VuZCIgaW4KKy8vIFNlbWE6OkNoZWNrRXF1aXZhbGVudEV4Y2VwdGlvblNwZWMsIENsYW5nIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhcyBhIHZhbGlkCisvLyByZWRlY2xhcmF0aW9uIG9mIGdsaWJjJ3MgZGVjbGFyYXRpb24uCitleHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgIShkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChfbW1fbWFsbG9jKSkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgKl9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFsbG9jX18pKQorX21tX21hbGxvYyhzaXplX3QgX19zaXplLCBzaXplX3QgX19hbGlnbikKK3sKKyAgaWYgKF9fYWxpZ24gPT0gMSkgeworICAgIHJldHVybiBtYWxsb2MoX19zaXplKTsKKyAgfQorCisgIGlmICghKF9fYWxpZ24gJiAoX19hbGlnbiAtIDEpKSAmJiBfX2FsaWduIDwgc2l6ZW9mKHZvaWQgKikpCisgICAgX19hbGlnbiA9IHNpemVvZih2b2lkICopOworCisgIHZvaWQgKl9fbWFsbG9jZWRNZW1vcnk7CisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyAgX19tYWxsb2NlZE1lbW9yeSA9IF9fbWluZ3dfYWxpZ25lZF9tYWxsb2MoX19zaXplLCBfX2FsaWduKTsKKyNlbGlmIGRlZmluZWQoX1dJTjMyKQorICBfX21hbGxvY2VkTWVtb3J5ID0gX2FsaWduZWRfbWFsbG9jKF9fc2l6ZSwgX19hbGlnbik7CisjZWxzZQorICBpZiAocG9zaXhfbWVtYWxpZ24oJl9fbWFsbG9jZWRNZW1vcnksIF9fYWxpZ24sIF9fc2l6ZSkpCisgICAgcmV0dXJuIDA7CisjZW5kaWYKKworICByZXR1cm4gX19tYWxsb2NlZE1lbW9yeTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX21tX2ZyZWUodm9pZCAqX19wKQoreworICBmcmVlKF9fcCk7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fTU1fTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW1pbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJjYjFhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9tbWludHJpbi5oCkBAIC0wLDAgKzEsNTAzIEBACisvKj09PS0tLS0gbW1pbnRyaW4uaCAtIE1NWCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fTU1JTlRSSU5fSAorI2RlZmluZSBfX01NSU5UUklOX0gKKwordHlwZWRlZiBsb25nIGxvbmcgX19tNjQgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDgpKSk7CisKK3R5cGVkZWYgaW50IF9fdjJzaSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKK3R5cGVkZWYgc2hvcnQgX192NGhpIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOwordHlwZWRlZiBjaGFyIF9fdjhxaSBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJtbXgiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZW1wdHkodm9pZCkKK3sKKyAgICBfX2J1aWx0aW5faWEzMl9lbW1zKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpMzJfc2k2NChpbnQgX19pKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfdmVjX2luaXRfdjJzaShfX2ksIDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2k2NF9zaTMyKF9fbTY0IF9fbSkKK3sKKyAgICByZXR1cm4gX19idWlsdGluX2lhMzJfdmVjX2V4dF92MnNpKChfX3Yyc2kpX19tLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2k2NF9tNjQobG9uZyBsb25nIF9faSkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9faTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dG02NF9zaTY0KF9fbTY0IF9fbSkKK3sKKyAgICByZXR1cm4gKGxvbmcgbG9uZylfX207Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BhY2tzX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhY2tzc3diKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGFja3NfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFja3NzZHcoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9wYWNrc19wdTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWNrdXN3YigoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2hpX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHVucGNraGJ3KChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHVucGNraHdkKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHVucGNraGRxKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNrbG9fcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2tsYncoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2tsd2QoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91bnBhY2tsb19waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wdW5wY2tsZHEoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZF9waTMyKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkZCgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkc2IoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRzX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhZGRzdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FkZHNfcHU4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkdXNiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc19wdTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWRkdXN3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YmIoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YncoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YmQoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJzX3BpOChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnNiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3Vic19waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3Vic3coKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdWJzX3B1OChfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnVzYigoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1YnNfcHUxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHN1YnVzdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGRfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1hZGR3ZCgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGhpX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BtdWxodygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGxvX3BpMTYoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BtdWxsdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbF9waTE2KF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzbGx3KChfX3Y0aGkpX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsaV9waTE2KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xsd2koKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zbGxfcGkzMihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xsZCgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NsbGlfcGkzMihfX202NCBfX20sIGludCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbGRpKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsX3NpNjQoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNsbHEoX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2xsaV9zaTY0KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2xscWkoX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JhX3BpMTYoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNyYXcoKF9fdjRoaSlfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmFpX3BpMTYoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmF3aSgoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NyYV9waTMyKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmFkKChfX3Yyc2kpX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JhaV9waTMyKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JhZGkoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxfcGkxNihfX202NCBfX20sIF9fbTY0IF9fY291bnQpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc3JsdygoX192NGhpKV9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybGlfcGkxNihfX202NCBfX20sIGludCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybHdpKChfX3Y0aGkpX19tLCBfX2NvdW50KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3JsX3BpMzIoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybGQoKF9fdjJzaSlfX20sIF9fY291bnQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zcmxpX3BpMzIoX19tNjQgX19tLCBpbnQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmxkaSgoX192MnNpKV9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybF9zaTY0KF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzcmxxKF9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NybGlfc2k2NChfX202NCBfX20sIGludCBfX2NvdW50KQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNybHFpKF9fbSwgX19jb3VudCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZF9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BhbmQoX19tMSwgX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZG5vdF9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BhbmRuKF9fbTEsIF9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9vcl9zaTY0KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3BvcihfX20xLCBfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1feG9yX3NpNjQoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gX19idWlsdGluX2lhMzJfcHhvcihfX20xLCBfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfcGk4KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZXFiKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfcGkxNihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGNtcGVxdygoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX3BpMzIoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BjbXBlcWQoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9waTgoX19tNjQgX19tMSwgX19tNjQgX19tMikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BjbXBndGIoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBndF9waTE2KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wY21wZ3R3KChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfcGkzMihfX202NCBfX20xLCBfX202NCBfX20yKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGNtcGd0ZCgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHplcm9fc2k2NCh2b2lkKQoreworICAgIHJldHVybiAoX19tNjQpeyAwTEwgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BpMzIoaW50IF9faTEsIGludCBfX2kwKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfdmVjX2luaXRfdjJzaShfX2kwLCBfX2kxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0X3BpMTYoc2hvcnQgX19zMywgc2hvcnQgX19zMiwgc2hvcnQgX19zMSwgc2hvcnQgX19zMCkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3ZlY19pbml0X3Y0aGkoX19zMCwgX19zMSwgX19zMiwgX19zMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9waTgoY2hhciBfX2I3LCBjaGFyIF9fYjYsIGNoYXIgX19iNSwgY2hhciBfX2I0LCBjaGFyIF9fYjMsIGNoYXIgX19iMiwKKyAgICAgICAgICAgIGNoYXIgX19iMSwgY2hhciBfX2IwKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfdmVjX2luaXRfdjhxaShfX2IwLCBfX2IxLCBfX2IyLCBfX2IzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2I0LCBfX2I1LCBfX2I2LCBfX2I3KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9waTMyKGludCBfX2kpCit7CisgICAgcmV0dXJuIF9tbV9zZXRfcGkzMihfX2ksIF9faSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldDFfcGkxNihzaG9ydCBfX3cpCit7CisgICAgcmV0dXJuIF9tbV9zZXRfcGkxNihfX3csIF9fdywgX193LCBfX3cpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXQxX3BpOChjaGFyIF9fYikKK3sKKyAgICByZXR1cm4gX21tX3NldF9waTgoX19iLCBfX2IsIF9fYiwgX19iLCBfX2IsIF9fYiwgX19iLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX3BpMzIoaW50IF9faTAsIGludCBfX2kxKQoreworICAgIHJldHVybiBfbW1fc2V0X3BpMzIoX19pMSwgX19pMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfcGkxNihzaG9ydCBfX3cwLCBzaG9ydCBfX3cxLCBzaG9ydCBfX3cyLCBzaG9ydCBfX3czKQoreworICAgIHJldHVybiBfbW1fc2V0X3BpMTYoX193MywgX193MiwgX193MSwgX193MCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHJfcGk4KGNoYXIgX19iMCwgY2hhciBfX2IxLCBjaGFyIF9fYjIsIGNoYXIgX19iMywgY2hhciBfX2I0LCBjaGFyIF9fYjUsCisgICAgICAgICAgICAgY2hhciBfX2I2LCBjaGFyIF9fYjcpCit7CisgICAgcmV0dXJuIF9tbV9zZXRfcGk4KF9fYjcsIF9fYjYsIF9fYjUsIF9fYjQsIF9fYjMsIF9fYjIsIF9fYjEsIF9fYjApOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKy8qIEFsaWFzZXMgZm9yIGNvbXBhdGliaWxpdHkuICovCisjZGVmaW5lIF9tX2VtcHR5IF9tbV9lbXB0eQorI2RlZmluZSBfbV9mcm9tX2ludCBfbW1fY3Z0c2kzMl9zaTY0CisjZGVmaW5lIF9tX2Zyb21faW50NjQgX21tX2N2dHNpNjRfbTY0CisjZGVmaW5lIF9tX3RvX2ludCBfbW1fY3Z0c2k2NF9zaTMyCisjZGVmaW5lIF9tX3RvX2ludDY0IF9tbV9jdnRtNjRfc2k2NAorI2RlZmluZSBfbV9wYWNrc3N3YiBfbW1fcGFja3NfcGkxNgorI2RlZmluZSBfbV9wYWNrc3NkdyBfbW1fcGFja3NfcGkzMgorI2RlZmluZSBfbV9wYWNrdXN3YiBfbW1fcGFja3NfcHUxNgorI2RlZmluZSBfbV9wdW5wY2toYncgX21tX3VucGFja2hpX3BpOAorI2RlZmluZSBfbV9wdW5wY2tod2QgX21tX3VucGFja2hpX3BpMTYKKyNkZWZpbmUgX21fcHVucGNraGRxIF9tbV91bnBhY2toaV9waTMyCisjZGVmaW5lIF9tX3B1bnBja2xidyBfbW1fdW5wYWNrbG9fcGk4CisjZGVmaW5lIF9tX3B1bnBja2x3ZCBfbW1fdW5wYWNrbG9fcGkxNgorI2RlZmluZSBfbV9wdW5wY2tsZHEgX21tX3VucGFja2xvX3BpMzIKKyNkZWZpbmUgX21fcGFkZGIgX21tX2FkZF9waTgKKyNkZWZpbmUgX21fcGFkZHcgX21tX2FkZF9waTE2CisjZGVmaW5lIF9tX3BhZGRkIF9tbV9hZGRfcGkzMgorI2RlZmluZSBfbV9wYWRkc2IgX21tX2FkZHNfcGk4CisjZGVmaW5lIF9tX3BhZGRzdyBfbW1fYWRkc19waTE2CisjZGVmaW5lIF9tX3BhZGR1c2IgX21tX2FkZHNfcHU4CisjZGVmaW5lIF9tX3BhZGR1c3cgX21tX2FkZHNfcHUxNgorI2RlZmluZSBfbV9wc3ViYiBfbW1fc3ViX3BpOAorI2RlZmluZSBfbV9wc3VidyBfbW1fc3ViX3BpMTYKKyNkZWZpbmUgX21fcHN1YmQgX21tX3N1Yl9waTMyCisjZGVmaW5lIF9tX3BzdWJzYiBfbW1fc3Vic19waTgKKyNkZWZpbmUgX21fcHN1YnN3IF9tbV9zdWJzX3BpMTYKKyNkZWZpbmUgX21fcHN1YnVzYiBfbW1fc3Vic19wdTgKKyNkZWZpbmUgX21fcHN1YnVzdyBfbW1fc3Vic19wdTE2CisjZGVmaW5lIF9tX3BtYWRkd2QgX21tX21hZGRfcGkxNgorI2RlZmluZSBfbV9wbXVsaHcgX21tX211bGhpX3BpMTYKKyNkZWZpbmUgX21fcG11bGx3IF9tbV9tdWxsb19waTE2CisjZGVmaW5lIF9tX3BzbGx3IF9tbV9zbGxfcGkxNgorI2RlZmluZSBfbV9wc2xsd2kgX21tX3NsbGlfcGkxNgorI2RlZmluZSBfbV9wc2xsZCBfbW1fc2xsX3BpMzIKKyNkZWZpbmUgX21fcHNsbGRpIF9tbV9zbGxpX3BpMzIKKyNkZWZpbmUgX21fcHNsbHEgX21tX3NsbF9zaTY0CisjZGVmaW5lIF9tX3BzbGxxaSBfbW1fc2xsaV9zaTY0CisjZGVmaW5lIF9tX3BzcmF3IF9tbV9zcmFfcGkxNgorI2RlZmluZSBfbV9wc3Jhd2kgX21tX3NyYWlfcGkxNgorI2RlZmluZSBfbV9wc3JhZCBfbW1fc3JhX3BpMzIKKyNkZWZpbmUgX21fcHNyYWRpIF9tbV9zcmFpX3BpMzIKKyNkZWZpbmUgX21fcHNybHcgX21tX3NybF9waTE2CisjZGVmaW5lIF9tX3Bzcmx3aSBfbW1fc3JsaV9waTE2CisjZGVmaW5lIF9tX3BzcmxkIF9tbV9zcmxfcGkzMgorI2RlZmluZSBfbV9wc3JsZGkgX21tX3NybGlfcGkzMgorI2RlZmluZSBfbV9wc3JscSBfbW1fc3JsX3NpNjQKKyNkZWZpbmUgX21fcHNybHFpIF9tbV9zcmxpX3NpNjQKKyNkZWZpbmUgX21fcGFuZCBfbW1fYW5kX3NpNjQKKyNkZWZpbmUgX21fcGFuZG4gX21tX2FuZG5vdF9zaTY0CisjZGVmaW5lIF9tX3BvciBfbW1fb3Jfc2k2NAorI2RlZmluZSBfbV9weG9yIF9tbV94b3Jfc2k2NAorI2RlZmluZSBfbV9wY21wZXFiIF9tbV9jbXBlcV9waTgKKyNkZWZpbmUgX21fcGNtcGVxdyBfbW1fY21wZXFfcGkxNgorI2RlZmluZSBfbV9wY21wZXFkIF9tbV9jbXBlcV9waTMyCisjZGVmaW5lIF9tX3BjbXBndGIgX21tX2NtcGd0X3BpOAorI2RlZmluZSBfbV9wY21wZ3R3IF9tbV9jbXBndF9waTE2CisjZGVmaW5lIF9tX3BjbXBndGQgX21tX2NtcGd0X3BpMzIKKworI2VuZGlmIC8qIF9fTU1JTlRSSU5fSCAqLworCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21vZHVsZS5tb2R1bGVtYXAgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL21vZHVsZS5tb2R1bGVtYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0N2U4OQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvbW9kdWxlLm1vZHVsZW1hcApAQCAtMCwwICsxLDE3MSBAQAorbW9kdWxlIF9CdWlsdGluX2ludHJpbnNpY3MgW3N5c3RlbV0gW2V4dGVybl9jXSB7CisgIGV4cGxpY2l0IG1vZHVsZSBhbHRpdmVjIHsKKyAgICByZXF1aXJlcyBhbHRpdmVjCisgICAgaGVhZGVyICJhbHRpdmVjLmgiCisgIH0KKworICBleHBsaWNpdCBtb2R1bGUgYXJtIHsKKyAgICByZXF1aXJlcyBhcm0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBhY2xlIHsKKyAgICAgIGhlYWRlciAiYXJtX2FjbGUuaCIKKyAgICAgIGV4cG9ydCAqCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIG5lb24geworICAgICAgcmVxdWlyZXMgbmVvbgorICAgICAgaGVhZGVyICJhcm1fbmVvbi5oIgorICAgICAgZXhwb3J0ICoKKyAgICB9CisgIH0KKworICBleHBsaWNpdCBtb2R1bGUgaW50ZWwgeworICAgIHJlcXVpcmVzIHg4NgorICAgIGV4cG9ydCAqCisKKyAgICBoZWFkZXIgImltbWludHJpbi5oIgorICAgIGhlYWRlciAieDg2aW50cmluLmgiCisKKyAgICBleHBsaWNpdCBtb2R1bGUgbW1fbWFsbG9jIHsKKyAgICAgIGhlYWRlciAibW1fbWFsbG9jLmgiCisgICAgICBleHBvcnQgKiAvLyBub3RlOiBmb3IgPHN0ZGxpYi5oPiBkZXBlbmRlbmN5CisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIGNwdWlkIHsKKyAgICAgIGhlYWRlciAiY3B1aWQuaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgbW14IHsKKyAgICAgIGhlYWRlciAibW1pbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgZjE2YyB7CisgICAgICBoZWFkZXIgImYxNmNpbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgc3NlIHsKKyAgICAgIGV4cG9ydCBtbXgKKyAgICAgIGV4cG9ydCBzc2UyIC8vIG5vdGU6IGZvciBoYWNraXNoIDxlbW1pbnRyaW4uaD4gZGVwZW5kZW5jeQorICAgICAgaGVhZGVyICJ4bW1pbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgc3NlMiB7CisgICAgICBleHBvcnQgc3NlCisgICAgICBoZWFkZXIgImVtbWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBzc2UzIHsKKyAgICAgIGV4cG9ydCBzc2UyCisgICAgICBoZWFkZXIgInBtbWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBzc3NlMyB7CisgICAgICBleHBvcnQgc3NlMworICAgICAgaGVhZGVyICJ0bW1pbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgc3NlNF8xIHsKKyAgICAgIGV4cG9ydCBzc3NlMworICAgICAgaGVhZGVyICJzbW1pbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgc3NlNF8yIHsKKyAgICAgIGV4cG9ydCBzc2U0XzEKKyAgICAgIGhlYWRlciAibm1taW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIHNzZTRhIHsKKyAgICAgIGV4cG9ydCBzc2UzCisgICAgICBoZWFkZXIgImFtbWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBhdnggeworICAgICAgZXhwb3J0IHNzZTRfMgorICAgICAgaGVhZGVyICJhdnhpbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgYXZ4MiB7CisgICAgICBleHBvcnQgYXZ4CisgICAgICBoZWFkZXIgImF2eDJpbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgYXZ4NTEyZiB7CisgICAgICBleHBvcnQgYXZ4MgorICAgICAgaGVhZGVyICJhdng1MTJmaW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIGF2eDUxMmVyIHsKKyAgICAgIGhlYWRlciAiYXZ4NTEyZXJpbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgYm1pIHsKKyAgICAgIGhlYWRlciAiYm1paW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIGJtaTIgeworICAgICAgaGVhZGVyICJibWkyaW50cmluLmgiCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIGZtYSB7CisgICAgICBoZWFkZXIgImZtYWludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBmbWE0IHsKKyAgICAgIGV4cG9ydCBzc2UzCisgICAgICBoZWFkZXIgImZtYTRpbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgbHpjbnQgeworICAgICAgaGVhZGVyICJsemNudGludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBwb3BjbnQgeworICAgICAgaGVhZGVyICJwb3BjbnRpbnRyaW4uaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgbW0zZG5vdyB7CisgICAgICBoZWFkZXIgIm1tM2Rub3cuaCIKKyAgICB9CisKKyAgICBleHBsaWNpdCBtb2R1bGUgeG9wIHsKKyAgICAgIGV4cG9ydCBmbWE0CisgICAgICBoZWFkZXIgInhvcGludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBhZXNfcGNsbXVsIHsKKyAgICAgIGhlYWRlciAid21taW50cmluLmgiCisgICAgICBleHBvcnQgYWVzCisgICAgICBleHBvcnQgcGNsbXVsCisgICAgfQorCisgICAgZXhwbGljaXQgbW9kdWxlIGFlcyB7CisgICAgICBoZWFkZXIgIl9fd21taW50cmluX2Flcy5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSBwY2xtdWwgeworICAgICAgaGVhZGVyICJfX3dtbWludHJpbl9wY2xtdWwuaCIKKyAgICB9CisgIH0KKworICBleHBsaWNpdCBtb2R1bGUgc3lzdGVteiB7CisgICAgcmVxdWlyZXMgc3lzdGVtegorICAgIGV4cG9ydCAqCisKKyAgICBoZWFkZXIgInMzOTBpbnRyaW4uaCIKKworICAgIGV4cGxpY2l0IG1vZHVsZSBodG0geworICAgICAgcmVxdWlyZXMgaHRtCisgICAgICBoZWFkZXIgImh0bWludHJpbi5oIgorICAgICAgaGVhZGVyICJodG14bGludHJpbi5oIgorICAgIH0KKworICAgIGV4cGxpY2l0IG1vZHVsZSB6dmVjdG9yIHsKKyAgICAgIHJlcXVpcmVzIHp2ZWN0b3IsIHZ4CisgICAgICBoZWFkZXIgInZlY2ludHJpbi5oIgorICAgIH0KKyAgfQorfQorCittb2R1bGUgX0J1aWx0aW5fc3RkZGVmX21heF9hbGlnbl90IFtzeXN0ZW1dIFtleHRlcm5fY10geworICBoZWFkZXIgIl9fc3RkZGVmX21heF9hbGlnbl90LmgiCit9CmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL25tbWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ubW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZlYzE1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ubW1pbnRyaW4uaApAQCAtMCwwICsxLDMwIEBACisvKj09PS0tLS0gbm1taW50cmluLmggLSBTU0U0IGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9OTU1JTlRSSU5fSAorI2RlZmluZSBfTk1NSU5UUklOX0gKKworLyogVG8gbWF0Y2ggZXhwZWN0YXRpb25zIG9mIGdjYyB3ZSBwdXQgdGhlIHNzZTQuMiBkZWZpbml0aW9ucyBpbnRvIHNtbWludHJpbi5oLAorICAganVzdCBpbmNsdWRlIGl0IG5vdyB0aGVuLiAgKi8KKyNpbmNsdWRlIDxzbW1pbnRyaW4uaD4KKyNlbmRpZiAvKiBfTk1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcG1taW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BtbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZjk0MDkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BtbWludHJpbi5oCkBAIC0wLDAgKzEsMTE2IEBACisvKj09PS0tLS0gcG1taW50cmluLmggLSBTU0UzIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fUE1NSU5UUklOX0gKKyNkZWZpbmUgX19QTU1JTlRSSU5fSAorCisjaW5jbHVkZSA8ZW1taW50cmluLmg+CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic3NlMyIpKSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sZGRxdV9zaTEyOChfX20xMjhpIGNvbnN0ICpfX3ApCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9sZGRxdSgoY2hhciBjb25zdCAqKV9fcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRzdWJfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FkZHN1YnBzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2hhZGRwcyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oc3ViX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9oc3VicHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZWhkdXBfcHMoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAxLCAxLCAzLCAzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVsZHVwX3BzKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMCwgMCwgMiwgMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkc3ViX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FkZHN1YnBkKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkX3BkKF9fbTEyOGQgX19hLCBfX20xMjhkIF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2hhZGRwZChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9wZChfX20xMjhkIF9fYSwgX19tMTI4ZCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9oc3VicGQoX19hLCBfX2IpOworfQorCisjZGVmaW5lICAgICAgICBfbW1fbG9hZGR1cF9wZChkcCkgICAgICAgIF9tbV9sb2FkMV9wZChkcCkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlZHVwX3BkKF9fbTEyOGQgX19hKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2EsIDAsIDApOworfQorCisjZGVmaW5lIF9NTV9ERU5PUk1BTFNfWkVST19PTiAgICgweDAwNDApCisjZGVmaW5lIF9NTV9ERU5PUk1BTFNfWkVST19PRkYgICgweDAwMDApCisKKyNkZWZpbmUgX01NX0RFTk9STUFMU19aRVJPX01BU0sgKDB4MDA0MCkKKworI2RlZmluZSBfTU1fR0VUX0RFTk9STUFMU19aRVJPX01PREUoKSAoX21tX2dldGNzcigpICYgX01NX0RFTk9STUFMU19aRVJPX01BU0spCisjZGVmaW5lIF9NTV9TRVRfREVOT1JNQUxTX1pFUk9fTU9ERSh4KSAoX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfl9NTV9ERU5PUk1BTFNfWkVST19NQVNLKSB8ICh4KSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW9uaXRvcih2b2lkIGNvbnN0ICpfX3AsIHVuc2lnbmVkIF9fZXh0ZW5zaW9ucywgdW5zaWduZWQgX19oaW50cykKK3sKKyAgX19idWlsdGluX2lhMzJfbW9uaXRvcigodm9pZCAqKV9fcCwgX19leHRlbnNpb25zLCBfX2hpbnRzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9td2FpdCh1bnNpZ25lZCBfX2V4dGVuc2lvbnMsIHVuc2lnbmVkIF9faGludHMpCit7CisgIF9fYnVpbHRpbl9pYTMyX213YWl0KF9fZXh0ZW5zaW9ucywgX19oaW50cyk7Cit9CisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9fUE1NSU5UUklOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcG9wY250aW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BvcGNudGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmY2RhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3BvcGNudGludHJpbi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qPT09LS0tLSBwb3BjbnRpbnRyaW4uaCAtIFBPUENOVCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX1BPUENOVElOVFJJTl9ICisjZGVmaW5lIF9QT1BDTlRJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInBvcGNudCIpKSkKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BvcGNudF91MzIodW5zaWduZWQgaW50IF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudChfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcG9wY250MzIoaW50IF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudChfX0EpOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3BvcGNudF91NjQodW5zaWduZWQgbG9uZyBsb25nIF9fQSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKF9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19wb3BjbnQ2NChsb25nIGxvbmcgX19BKQoreworICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwoX19BKTsKK30KKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmIC8qIF9QT1BDTlRJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9wcmZjaHdpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcHJmY2h3aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwMjg1NwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvcHJmY2h3aW50cmluLmgKQEAgLTAsMCArMSw0NSBAQAorLyo9PT0tLS0tIHByZmNod2ludHJpbi5oIC0gUFJFRkVUQ0hXIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmICFkZWZpbmVkKF9fWDg2SU5UUklOX0gpICYmICFkZWZpbmVkKF9NTTNETk9XX0hfSU5DTFVERUQpCisjZXJyb3IgIk5ldmVyIHVzZSA8cHJmY2h3aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gb3IgPG1tM2Rub3cuaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1BSRkNIV0lOVFJJTl9ICisjZGVmaW5lIF9fUFJGQ0hXSU5UUklOX0gKKworI2lmIGRlZmluZWQoX19QUkZDSFdfXykgfHwgZGVmaW5lZChfXzNkTk9XX18pCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXykpCitfbV9wcmVmZXRjaCh2b2lkICpfX1ApCit7CisgIF9fYnVpbHRpbl9wcmVmZXRjaCAoX19QLCAwLCAzIC8qIF9NTV9ISU5UX1QwICovKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18pKQorX21fcHJlZmV0Y2h3KHZvaWQgKl9fUCkKK3sKKyAgX19idWlsdGluX3ByZWZldGNoIChfX1AsIDEsIDMgLyogX01NX0hJTlRfVDAgKi8pOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1BSRkNIV0lOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Jkc2VlZGludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9yZHNlZWRpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjFmNGVhCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9yZHNlZWRpbnRyaW4uaApAQCAtMCwwICsxLDU2IEBACisvKj09PS0tLS0gcmRzZWVkaW50cmluLmggLSBSRFNFRUQgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fWDg2SU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxyZHNlZWRpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPHg4NmludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fUkRTRUVESU5UUklOX0gKKyNkZWZpbmUgX19SRFNFRURJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJkc2VlZCIpKSkKKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX3Jkc2VlZDE2X3N0ZXAodW5zaWduZWQgc2hvcnQgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Jkc2VlZDE2X3N0ZXAoX19wKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX3Jkc2VlZDMyX3N0ZXAodW5zaWduZWQgaW50ICpfX3ApCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9yZHNlZWQzMl9zdGVwKF9fcCk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfcmRzZWVkNjRfc3RlcCh1bnNpZ25lZCBsb25nIGxvbmcgKl9fcCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Jkc2VlZDY0X3N0ZXAoX19wKTsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX1JEU0VFRElOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3J0bWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ydG1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmE1OGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9ydG1pbnRyaW4uaApAQCAtMCwwICsxLDU5IEBACisvKj09PS0tLS0gcnRtaW50cmluLmggLSBSVE0gaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDxydG1pbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fUlRNSU5UUklOX0gKKyNkZWZpbmUgX19SVE1JTlRSSU5fSAorCisjZGVmaW5lIF9YQkVHSU5fU1RBUlRFRCAgICh+MHUpCisjZGVmaW5lIF9YQUJPUlRfRVhQTElDSVQgICgxIDw8IDApCisjZGVmaW5lIF9YQUJPUlRfUkVUUlkgICAgICgxIDw8IDEpCisjZGVmaW5lIF9YQUJPUlRfQ09ORkxJQ1QgICgxIDw8IDIpCisjZGVmaW5lIF9YQUJPUlRfQ0FQQUNJVFkgICgxIDw8IDMpCisjZGVmaW5lIF9YQUJPUlRfREVCVUcgICAgICgxIDw8IDQpCisjZGVmaW5lIF9YQUJPUlRfTkVTVEVEICAgICgxIDw8IDUpCisjZGVmaW5lIF9YQUJPUlRfQ09ERSh4KSAgICgoKHgpID4+IDI0KSAmIDB4RkYpCisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygicnRtIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeGJlZ2luKHZvaWQpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl94YmVnaW4oKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194ZW5kKHZvaWQpCit7CisgIF9fYnVpbHRpbl9pYTMyX3hlbmQoKTsKK30KKworI2RlZmluZSBfeGFib3J0KGltbSkgX19idWlsdGluX2lhMzJfeGFib3J0KChpbW0pKQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX1JUTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3MzOTBpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvczM5MGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTI3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3MzOTBpbnRyaW4uaApAQCAtMCwwICsxLDM5IEBACisvKj09PS0tLS0gczM5MGludHJpbi5oIC0gU3lzdGVtWiBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fUzM5MElOVFJJTl9ICisjZGVmaW5lIF9fUzM5MElOVFJJTl9ICisKKyNpZm5kZWYgX19zMzkwX18KKyNlcnJvciAiPHMzOTBpbnRyaW4uaD4gaXMgZm9yIHMzOTAgb25seSIKKyNlbmRpZgorCisjaWZkZWYgX19IVE1fXworI2luY2x1ZGUgPGh0bWludHJpbi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX1ZFQ19fCisjaW5jbHVkZSA8dmVjaW50cmluLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9fUzM5MElOVFJJTl9IKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2FsbG9jYXRvcl9pbnRlcmZhY2UuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2FsbG9jYXRvcl9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjI1MWY4Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvYWxsb2NhdG9yX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8vPT09LS0gYWxsb2NhdG9yX2ludGVyZmFjZS5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIgZm9yIGFsbG9jYXRvciB1c2VkIGluIHNhbml0aXplcnMgKEFTYW4vVFNhbi9NU2FuKS4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIFNBTklUSVpFUl9BTExPQ0FUT1JfSU5URVJGQUNFX0gKKyNkZWZpbmUgU0FOSVRJWkVSX0FMTE9DQVRPUl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyAgLyogUmV0dXJucyB0aGUgZXN0aW1hdGVkIG51bWJlciBvZiBieXRlcyB0aGF0IHdpbGwgYmUgcmVzZXJ2ZWQgYnkgYWxsb2NhdG9yCisgICAgIGZvciByZXF1ZXN0IG9mICJzaXplIiBieXRlcy4gSWYgYWxsb2NhdG9yIGNhbid0IGFsbG9jYXRlIHRoYXQgbXVjaAorICAgICBtZW1vcnksIHJldHVybnMgdGhlIG1heGltYWwgcG9zc2libGUgYWxsb2NhdGlvbiBzaXplLCBvdGhlcndpc2UgcmV0dXJucworICAgICAic2l6ZSIuICovCisgIHNpemVfdCBfX3Nhbml0aXplcl9nZXRfZXN0aW1hdGVkX2FsbG9jYXRlZF9zaXplKHNpemVfdCBzaXplKTsKKworICAvKiBSZXR1cm5zIHRydWUgaWYgcCB3YXMgcmV0dXJuZWQgYnkgdGhlIGFsbG9jYXRvciBhbmQKKyAgICAgaXMgbm90IHlldCBmcmVlZC4gKi8KKyAgaW50IF9fc2FuaXRpemVyX2dldF9vd25lcnNoaXAoY29uc3Qgdm9sYXRpbGUgdm9pZCAqcCk7CisKKyAgLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlc2VydmVkIGZvciB0aGUgcG9pbnRlciBwLgorICAgICBSZXF1aXJlcyAoZ2V0X293bmVyc2hpcChwKSA9PSB0cnVlKSBvciAocCA9PSAwKS4gKi8KKyAgc2l6ZV90IF9fc2FuaXRpemVyX2dldF9hbGxvY2F0ZWRfc2l6ZShjb25zdCB2b2xhdGlsZSB2b2lkICpwKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMsIGFsbG9jYXRlZCBhbmQgbm90IHlldCBmcmVlZCBieSB0aGUgYXBwbGljYXRpb24uICovCisgIHNpemVfdCBfX3Nhbml0aXplcl9nZXRfY3VycmVudF9hbGxvY2F0ZWRfYnl0ZXMoKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMsIG1tYXBlZCBieSB0aGUgYWxsb2NhdG9yIHRvIGZ1bGZpbGwgYWxsb2NhdGlvbiByZXF1ZXN0cy4KKyAgICAgR2VuZXJhbGx5LCBmb3IgcmVxdWVzdCBvZiBYIGJ5dGVzLCBhbGxvY2F0b3IgY2FuIHJlc2VydmUgYW5kIGFkZCB0byBmcmVlCisgICAgIGxpc3RzIGEgbGFyZ2UgbnVtYmVyIG9mIGNodW5rcyBvZiBzaXplIFggdG8gdXNlIHRoZW0gZm9yIGZ1dHVyZSByZXF1ZXN0cy4KKyAgICAgQWxsIHRoZXNlIGNodW5rcyBjb3VudCB0b3dhcmQgdGhlIGhlYXAgc2l6ZS4gQ3VycmVudGx5LCBhbGxvY2F0b3IgbmV2ZXIKKyAgICAgcmVsZWFzZXMgbWVtb3J5IHRvIE9TIChpbnN0ZWFkLCBpdCBqdXN0IHB1dHMgZnJlZWQgY2h1bmtzIHRvIGZyZWUKKyAgICAgbGlzdHMpLiAqLworICBzaXplX3QgX19zYW5pdGl6ZXJfZ2V0X2hlYXBfc2l6ZSgpOworCisgIC8qIE51bWJlciBvZiBieXRlcywgbW1hcGVkIGJ5IHRoZSBhbGxvY2F0b3IsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZ1bGZpbGwKKyAgICAgYWxsb2NhdGlvbiByZXF1ZXN0cy4gV2hlbiBhIHVzZXIgcHJvZ3JhbSBmcmVlcyBtZW1vcnkgY2h1bmssIGl0IGNhbiBmaXJzdAorICAgICBmYWxsIGludG8gcXVhcmFudGluZSBhbmQgd2lsbCBjb3VudCB0b3dhcmQgX19zYW5pdGl6ZXJfZ2V0X2ZyZWVfYnl0ZXMoKQorICAgICBsYXRlci4gKi8KKyAgc2l6ZV90IF9fc2FuaXRpemVyX2dldF9mcmVlX2J5dGVzKCk7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIGluIHVubWFwcGVkIHBhZ2VzLCB0aGF0IGFyZSByZWxlYXNlZCB0byBPUy4gQ3VycmVudGx5LAorICAgICBhbHdheXMgcmV0dXJucyAwLiAqLworICBzaXplX3QgX19zYW5pdGl6ZXJfZ2V0X3VubWFwcGVkX2J5dGVzKCk7CisKKyAgLyogTWFsbG9jIGhvb2tzIHRoYXQgbWF5IGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdXNlci4KKyAgICAgX19zYW5pdGl6ZXJfbWFsbG9jX2hvb2socHRyLCBzaXplKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICBhbGxvY2F0aW9uIG9mICJzaXplIiBieXRlcywgd2hpY2ggcmV0dXJuZWQgInB0ciIuCisgICAgIF9fc2FuaXRpemVyX2ZyZWVfaG9vayhwdHIpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAgICBkZWFsbG9jYXRpb24gb2YgInB0ciIuICovCisgIHZvaWQgX19zYW5pdGl6ZXJfbWFsbG9jX2hvb2soY29uc3Qgdm9sYXRpbGUgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisgIHZvaWQgX19zYW5pdGl6ZXJfZnJlZV9ob29rKGNvbnN0IHZvbGF0aWxlIHZvaWQgKnB0cik7CisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2FzYW5faW50ZXJmYWNlLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9hc2FuX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YmEwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9hc2FuX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsMTUxIEBACisvLz09PS0tIHNhbml0aXplci9hc2FuX2ludGVyZmFjZS5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIEMrKyAtKi09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vIFRoaXMgZmlsZSBpcyBhIHBhcnQgb2YgQWRkcmVzc1Nhbml0aXplci4KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlci4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIFNBTklUSVpFUl9BU0FOX0lOVEVSRkFDRV9ICisjZGVmaW5lIFNBTklUSVpFUl9BU0FOX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyAgLy8gTWFya3MgbWVtb3J5IHJlZ2lvbiBbYWRkciwgYWRkcitzaXplKSBhcyB1bmFkZHJlc3NhYmxlLgorICAvLyBUaGlzIG1lbW9yeSBtdXN0IGJlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHByb2dyYW0uIEFjY2Vzc2luZworICAvLyBhZGRyZXNzZXMgaW4gdGhpcyByZWdpb24gZnJvbSBpbnN0cnVtZW50ZWQgY29kZSBpcyBmb3JiaWRkZW4gdW50aWwKKyAgLy8gdGhpcyByZWdpb24gaXMgdW5wb2lzb25lZC4gVGhpcyBmdW5jdGlvbiBpcyBub3QgZ3VhcmFudGVlZCB0byBwb2lzb24KKyAgLy8gdGhlIHdob2xlIHJlZ2lvbiAtIGl0IG1heSBwb2lzb24gb25seSBzdWJyZWdpb24gb2YgW2FkZHIsIGFkZHIrc2l6ZSkgZHVlCisgIC8vIHRvIEFTYW4gYWxpZ25tZW50IHJlc3RyaWN0aW9ucy4KKyAgLy8gTWV0aG9kIGlzIE5PVCB0aHJlYWQtc2FmZSBpbiB0aGUgc2Vuc2UgdGhhdCBubyB0d28gdGhyZWFkcyBjYW4KKyAgLy8gKHVuKXBvaXNvbiBtZW1vcnkgaW4gdGhlIHNhbWUgbWVtb3J5IHJlZ2lvbiBzaW11bHRhbmVvdXNseS4KKyAgdm9pZCBfX2FzYW5fcG9pc29uX21lbW9yeV9yZWdpb24odm9pZCBjb25zdCB2b2xhdGlsZSAqYWRkciwgc2l6ZV90IHNpemUpOworICAvLyBNYXJrcyBtZW1vcnkgcmVnaW9uIFthZGRyLCBhZGRyK3NpemUpIGFzIGFkZHJlc3NhYmxlLgorICAvLyBUaGlzIG1lbW9yeSBtdXN0IGJlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHByb2dyYW0uIEFjY2Vzc2luZworICAvLyBhZGRyZXNzZXMgaW4gdGhpcyByZWdpb24gaXMgYWxsb3dlZCB1bnRpbCB0aGlzIHJlZ2lvbiBpcyBwb2lzb25lZCBhZ2Fpbi4KKyAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgdW5wb2lzb24gYSBzdXBlcnJlZ2lvbiBvZiBbYWRkciwgYWRkcitzaXplKSBkdWUgdG8KKyAgLy8gQVNhbiBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zLgorICAvLyBNZXRob2QgaXMgTk9UIHRocmVhZC1zYWZlIGluIHRoZSBzZW5zZSB0aGF0IG5vIHR3byB0aHJlYWRzIGNhbgorICAvLyAodW4pcG9pc29uIG1lbW9yeSBpbiB0aGUgc2FtZSBtZW1vcnkgcmVnaW9uIHNpbXVsdGFuZW91c2x5LgorICB2b2lkIF9fYXNhbl91bnBvaXNvbl9tZW1vcnlfcmVnaW9uKHZvaWQgY29uc3Qgdm9sYXRpbGUgKmFkZHIsIHNpemVfdCBzaXplKTsKKworLy8gVXNlciBjb2RlIHNob3VsZCB1c2UgbWFjcm9zIGluc3RlYWQgb2YgZnVuY3Rpb25zLgorI2lmIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpIHx8IGRlZmluZWQoX19TQU5JVElaRV9BRERSRVNTX18pCisjZGVmaW5lIEFTQU5fUE9JU09OX01FTU9SWV9SRUdJT04oYWRkciwgc2l6ZSkgXAorICBfX2FzYW5fcG9pc29uX21lbW9yeV9yZWdpb24oKGFkZHIpLCAoc2l6ZSkpCisjZGVmaW5lIEFTQU5fVU5QT0lTT05fTUVNT1JZX1JFR0lPTihhZGRyLCBzaXplKSBcCisgIF9fYXNhbl91bnBvaXNvbl9tZW1vcnlfcmVnaW9uKChhZGRyKSwgKHNpemUpKQorI2Vsc2UKKyNkZWZpbmUgQVNBTl9QT0lTT05fTUVNT1JZX1JFR0lPTihhZGRyLCBzaXplKSBcCisgICgodm9pZCkoYWRkciksICh2b2lkKShzaXplKSkKKyNkZWZpbmUgQVNBTl9VTlBPSVNPTl9NRU1PUllfUkVHSU9OKGFkZHIsIHNpemUpIFwKKyAgKCh2b2lkKShhZGRyKSwgKHZvaWQpKHNpemUpKQorI2VuZGlmCisKKyAgLy8gUmV0dXJucyAxIGlmIGFkZHIgaXMgcG9pc29uZWQgKGkuZS4gMS1ieXRlIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoaXMKKyAgLy8gYWRkcmVzcyB3aWxsIHJlc3VsdCBpbiBlcnJvciByZXBvcnQgZnJvbSBBZGRyZXNzU2FuaXRpemVyKS4KKyAgLy8gT3RoZXJ3aXNlIHJldHVybnMgMC4KKyAgaW50IF9fYXNhbl9hZGRyZXNzX2lzX3BvaXNvbmVkKHZvaWQgY29uc3Qgdm9sYXRpbGUgKmFkZHIpOworCisgIC8vIElmIGF0IGxlYXN0IG9uZSBieXRlIGluIFtiZWcsIGJlZytzaXplKSBpcyBwb2lzb25lZCwgcmV0dXJuIHRoZSBhZGRyZXNzCisgIC8vIG9mIHRoZSBmaXJzdCBzdWNoIGJ5dGUuIE90aGVyd2lzZSByZXR1cm4gMC4KKyAgdm9pZCAqX19hc2FuX3JlZ2lvbl9pc19wb2lzb25lZCh2b2lkICpiZWcsIHNpemVfdCBzaXplKTsKKworICAvLyBQcmludCB0aGUgZGVzY3JpcHRpb24gb2YgYWRkciAodXNlZnVsIHdoZW4gZGVidWdnaW5nIGluIGdkYikuCisgIHZvaWQgX19hc2FuX2Rlc2NyaWJlX2FkZHJlc3Modm9pZCAqYWRkcik7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gYSBkZWJ1Z2dlciB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYW4gQVNhbiBlcnJvci4KKyAgLy8gUmV0dXJucyAxIGlmIGFuIGVycm9yIGhhcyBiZWVuIChvciBpcyBiZWluZykgcmVwb3J0ZWQsIG90aGVyd2lzZSByZXR1cm5zIDAuCisgIGludCBfX2FzYW5fcmVwb3J0X3ByZXNlbnQoKTsKKworICAvLyBVc2VmdWwgZm9yIGNhbGxpbmcgZnJvbSBhIGRlYnVnZ2VyIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbiBBU2FuIGVycm9yLgorICAvLyBJZiBhbiBlcnJvciBoYXMgYmVlbiAob3IgaXMgYmVpbmcpIHJlcG9ydGVkLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4KKyAgLy8gdGhlIHBjLCBicCwgc3AsIGFkZHJlc3MsIGFjY2VzcyB0eXBlICgwID0gcmVhZCwgMSA9IHdyaXRlKSwgYWNjZXNzIHNpemUgYW5kCisgIC8vIGJ1ZyBkZXNjcmlwdGlvbiAoZS5nLiAiaGVhcC11c2UtYWZ0ZXItZnJlZSIpLiBPdGhlcndpc2UgdGhleSByZXR1cm4gMC4KKyAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfcGMoKTsKKyAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfYnAoKTsKKyAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfc3AoKTsKKyAgdm9pZCAqX19hc2FuX2dldF9yZXBvcnRfYWRkcmVzcygpOworICBpbnQgX19hc2FuX2dldF9yZXBvcnRfYWNjZXNzX3R5cGUoKTsKKyAgc2l6ZV90IF9fYXNhbl9nZXRfcmVwb3J0X2FjY2Vzc19zaXplKCk7CisgIGNvbnN0IGNoYXIgKl9fYXNhbl9nZXRfcmVwb3J0X2Rlc2NyaXB0aW9uKCk7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBvaW50ZXIuCisgIC8vIFJldHVybnMgdGhlIGNhdGVnb3J5IG9mIHRoZSBnaXZlbiBwb2ludGVyIGFzIGEgY29uc3RhbnQgc3RyaW5nLgorICAvLyBQb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFyZSAiZ2xvYmFsIiwgInN0YWNrIiwgInN0YWNrLWZha2UiLCAiaGVhcCIsCisgIC8vICJoZWFwLWludmFsaWQiLCAic2hhZG93LWxvdyIsICJzaGFkb3ctZ2FwIiwgInNoYWRvdy1oaWdoIiwgInVua25vd24iLgorICAvLyBJZiBnbG9iYWwgb3Igc3RhY2ssIHRyaWVzIHRvIGFsc28gcmV0dXJuIHRoZSB2YXJpYWJsZSBuYW1lLCBhZGRyZXNzIGFuZAorICAvLyBzaXplLiBJZiBoZWFwLCB0cmllcyB0byByZXR1cm4gdGhlIGNodW5rIGFkZHJlc3MgYW5kIHNpemUuICduYW1lJyBzaG91bGQKKyAgLy8gcG9pbnQgdG8gYW4gYWxsb2NhdGVkIGJ1ZmZlciBvZiBzaXplICduYW1lX3NpemUnLgorICBjb25zdCBjaGFyICpfX2FzYW5fbG9jYXRlX2FkZHJlc3Modm9pZCAqYWRkciwgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipyZWdpb25fYWRkcmVzcywgc2l6ZV90ICpyZWdpb25fc2l6ZSk7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCB0aGUgYWxsb2NhdGlvbiBzdGFjayB0cmFjZQorICAvLyBhbmQgdGhyZWFkIElEIGZvciBhIGhlYXAgYWRkcmVzcy4gU3RvcmVzIHVwIHRvICdzaXplJyBmcmFtZXMgaW50byAndHJhY2UnLAorICAvLyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RvcmVkIGZyYW1lcyBvciAwIG9uIGVycm9yLgorICBzaXplX3QgX19hc2FuX2dldF9hbGxvY19zdGFjayh2b2lkICphZGRyLCB2b2lkICoqdHJhY2UsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnRocmVhZF9pZCk7CisKKyAgLy8gVXNlZnVsIGZvciBjYWxsaW5nIGZyb20gdGhlIGRlYnVnZ2VyIHRvIGdldCB0aGUgZnJlZSBzdGFjayB0cmFjZQorICAvLyBhbmQgdGhyZWFkIElEIGZvciBhIGhlYXAgYWRkcmVzcy4gU3RvcmVzIHVwIHRvICdzaXplJyBmcmFtZXMgaW50byAndHJhY2UnLAorICAvLyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RvcmVkIGZyYW1lcyBvciAwIG9uIGVycm9yLgorICBzaXplX3QgX19hc2FuX2dldF9mcmVlX3N0YWNrKHZvaWQgKmFkZHIsIHZvaWQgKip0cmFjZSwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0aHJlYWRfaWQpOworCisgIC8vIFVzZWZ1bCBmb3IgY2FsbGluZyBmcm9tIHRoZSBkZWJ1Z2dlciB0byBnZXQgdGhlIGN1cnJlbnQgc2hhZG93IG1lbW9yeQorICAvLyBtYXBwaW5nLgorICB2b2lkIF9fYXNhbl9nZXRfc2hhZG93X21hcHBpbmcoc2l6ZV90ICpzaGFkb3dfc2NhbGUsIHNpemVfdCAqc2hhZG93X29mZnNldCk7CisKKyAgLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byByZXBvcnQgYW4gZXJyb3IuCisgIC8vIEhvd2V2ZXIgaXQgaXMgc3RpbGwgYSBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UgYmVjYXVzZSB1c2VycyBtYXkgd2FudCB0bworICAvLyBzZXQgYSBicmVha3BvaW50IG9uIHRoaXMgZnVuY3Rpb24gaW4gYSBkZWJ1Z2dlci4KKyAgdm9pZCBfX2FzYW5fcmVwb3J0X2Vycm9yKHZvaWQgKnBjLCB2b2lkICpicCwgdm9pZCAqc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphZGRyLCBpbnQgaXNfd3JpdGUsIHNpemVfdCBhY2Nlc3Nfc2l6ZSk7CisKKyAgLy8gRGVwcmVjYXRlZC4gQ2FsbCBfX3Nhbml0aXplcl9zZXRfZGVhdGhfY2FsbGJhY2sgaW5zdGVhZC4KKyAgdm9pZCBfX2FzYW5fc2V0X2RlYXRoX2NhbGxiYWNrKHZvaWQgKCpjYWxsYmFjaykodm9pZCkpOworCisgIHZvaWQgX19hc2FuX3NldF9lcnJvcl9yZXBvcnRfY2FsbGJhY2sodm9pZCAoKmNhbGxiYWNrKShjb25zdCBjaGFyKikpOworCisgIC8vIFVzZXIgbWF5IHByb3ZpZGUgZnVuY3Rpb24gdGhhdCB3b3VsZCBiZSBjYWxsZWQgcmlnaHQgd2hlbiBBU2FuIGRldGVjdHMKKyAgLy8gYW4gZXJyb3IuIFRoaXMgY2FuIGJlIHVzZWQgdG8gbm90aWNlIGNhc2VzIHdoZW4gQVNhbiBkZXRlY3RzIGFuIGVycm9yLCBidXQKKyAgLy8gdGhlIHByb2dyYW0gY3Jhc2hlcyBiZWZvcmUgQVNhbiByZXBvcnQgaXMgcHJpbnRlZC4KKyAgdm9pZCBfX2FzYW5fb25fZXJyb3IoKTsKKworICAvLyBQcmludHMgYWNjdW11bGF0ZWQgc3RhdHMgdG8gc3RkZXJyLiBVc2VkIGZvciBkZWJ1Z2dpbmcuCisgIHZvaWQgX19hc2FuX3ByaW50X2FjY3VtdWxhdGVkX3N0YXRzKCk7CisKKyAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgb3B0aW9uYWxseSBwcm92aWRlZCBieSB1c2VyIGFuZCBzaG91bGQgcmV0dXJuCisgIC8vIGEgc3RyaW5nIGNvbnRhaW5pbmcgQVNhbiBydW50aW1lIG9wdGlvbnMuIFNlZSBhc2FuX2ZsYWdzLmggZm9yIGRldGFpbHMuCisgIGNvbnN0IGNoYXIqIF9fYXNhbl9kZWZhdWx0X29wdGlvbnMoKTsKKworICAvLyBUaGUgZm9sbG93aW5nIDIgZnVuY3Rpb25zIGZhY2lsaXRhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGluIHByZXNlbmNlIG9mCisgIC8vIGFzYW4ncyBmYWtlIHN0YWNrLgorCisgIC8vIFJldHVybnMgYW4gb3BhcXVlIGhhbmRsZXIgdG8gYmUgdXNlZCBsYXRlciBpbiBfX2FzYW5fYWRkcl9pc19pbl9mYWtlX3N0YWNrLgorICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGRvZXMgbm90IGhhdmUgYSBmYWtlIHN0YWNrLgorICB2b2lkICpfX2FzYW5fZ2V0X2N1cnJlbnRfZmFrZV9zdGFjaygpOworCisgIC8vIElmIGZha2Vfc3RhY2sgaXMgbm9uLU5VTEwgYW5kIGFkZHIgYmVsb25ncyB0byBhIGZha2UgZnJhbWUgaW4KKyAgLy8gZmFrZV9zdGFjaywgcmV0dXJucyB0aGUgYWRkcmVzcyBvbiByZWFsIHN0YWNrIHRoYXQgY29ycmVzcG9uZHMgdG8KKyAgLy8gdGhlIGZha2UgZnJhbWUgYW5kIHNldHMgYmVnL2VuZCB0byB0aGUgYm91bmRhcmllcyBvZiB0aGlzIGZha2UgZnJhbWUuCisgIC8vIE90aGVyd2lzZSByZXR1cm5zIE5VTEwgYW5kIGRvZXMgbm90IHRvdWNoIGJlZy9lbmQuCisgIC8vIElmIGJlZy9lbmQgYXJlIE5VTEwsIHRoZXkgYXJlIG5vdCB0b3VjaGVkLgorICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBhIHRocmVhZCBvdGhlciB0aGFuIHRoZSBvd25lciBvZgorICAvLyBmYWtlX3N0YWNrLCBidXQgdGhlIG93bmVyIHRocmVhZCBuZWVkIHRvIGJlIGFsaXZlLgorICB2b2lkICpfX2FzYW5fYWRkcl9pc19pbl9mYWtlX3N0YWNrKHZvaWQgKmZha2Vfc3RhY2ssIHZvaWQgKmFkZHIsIHZvaWQgKipiZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmVuZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gU0FOSVRJWkVSX0FTQU5fSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczNmVkOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oCkBAIC0wLDAgKzEsMTM1IEBACisvLz09PS0tIHNhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIEMrKyAtKi09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vIENvbW1vbiBwYXJ0IG9mIHRoZSBwdWJsaWMgc2FuaXRpemVyIGludGVyZmFjZS4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZm5kZWYgU0FOSVRJWkVSX0NPTU1PTl9JTlRFUkZBQ0VfREVGU19ICisjZGVmaW5lIFNBTklUSVpFUl9DT01NT05fSU5URVJGQUNFX0RFRlNfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8vIEdDQyBkb2VzIG5vdCB1bmRlcnN0YW5kIF9faGFzX2ZlYXR1cmUuCisjaWYgIWRlZmluZWQoX19oYXNfZmVhdHVyZSkKKyMgZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkgMAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyAgLy8gQXJndW1lbnRzIGZvciBfX3Nhbml0aXplcl9zYW5kYm94X29uX25vdGlmeSgpIGJlbG93LgorICB0eXBlZGVmIHN0cnVjdCB7CisgICAgLy8gRW5hYmxlIHNhbmRib3ggc3VwcG9ydCBpbiBzYW5pdGl6ZXIgY292ZXJhZ2UuCisgICAgaW50IGNvdmVyYWdlX3NhbmRib3hlZDsKKyAgICAvLyBGaWxlIGRlc2NyaXB0b3IgdG8gd3JpdGUgY292ZXJhZ2UgZGF0YSB0by4gSWYgLTEgaXMgcGFzc2VkLCBhIGZpbGUgd2lsbAorICAgIC8vIGJlIHByZS1vcGVuZWQgYnkgX19zYW5pdGl6ZXJfc2FuZG9ieF9vbl9ub3RpZnkoKS4gVGhpcyBmaWVsZCBoYXMgbm8KKyAgICAvLyBlZmZlY3QgaWYgY292ZXJhZ2Vfc2FuZGJveGVkID09IDAuCisgICAgaW50cHRyX3QgY292ZXJhZ2VfZmQ7CisgICAgLy8gSWYgbm9uLXplcm8sIHNwbGl0IHRoZSBjb3ZlcmFnZSBkYXRhIGludG8gd2VsbC1mb3JtZWQgYmxvY2tzLiBUaGlzIGlzCisgICAgLy8gdXNlZnVsIHdoZW4gY292ZXJhZ2VfZmQgaXMgYSBzb2NrZXQgZGVzY3JpcHRvci4gRWFjaCBibG9jayB3aWxsIGNvbnRhaW4KKyAgICAvLyBhIGhlYWRlciwgYWxsb3dpbmcgZGF0YSBmcm9tIG11bHRpcGxlIHByb2Nlc3NlcyB0byBiZSBzZW50IG92ZXIgdGhlIHNhbWUKKyAgICAvLyBzb2NrZXQuCisgICAgdW5zaWduZWQgaW50IGNvdmVyYWdlX21heF9ibG9ja19zaXplOworICB9IF9fc2FuaXRpemVyX3NhbmRib3hfYXJndW1lbnRzOworCisgIC8vIFRlbGwgdGhlIHRvb2xzIHRvIHdyaXRlIHRoZWlyIHJlcG9ydHMgdG8gInBhdGguPHBpZD4iIGluc3RlYWQgb2Ygc3RkZXJyLgorICB2b2lkIF9fc2FuaXRpemVyX3NldF9yZXBvcnRfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKKworICAvLyBOb3RpZnkgdGhlIHRvb2xzIHRoYXQgdGhlIHNhbmRib3ggaXMgZ29pbmcgdG8gYmUgdHVybmVkIG9uLiBUaGUgcmVzZXJ2ZWQKKyAgLy8gcGFyYW1ldGVyIHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIHRvIGhvbGQgYSBzdHJ1Y3R1cmUgd2l0aCBmdW5jdGlvbnMKKyAgLy8gdGhhdCB0aGUgdG9vbHMgbWF5IGNhbGwgdG8gYnlwYXNzIHRoZSBzYW5kYm94LgorICB2b2lkIF9fc2FuaXRpemVyX3NhbmRib3hfb25fbm90aWZ5KF9fc2FuaXRpemVyX3NhbmRib3hfYXJndW1lbnRzICphcmdzKTsKKworICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdG9vbCB3aGVuIGl0IGhhcyBqdXN0IGZpbmlzaGVkIHJlcG9ydGluZworICAvLyBhbiBlcnJvci4gJ2Vycm9yX3N1bW1hcnknIGlzIGEgb25lLWxpbmUgc3RyaW5nIHRoYXQgc3VtbWFyaXplcworICAvLyB0aGUgZXJyb3IgbWVzc2FnZS4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2xpZW50LgorICB2b2lkIF9fc2FuaXRpemVyX3JlcG9ydF9lcnJvcl9zdW1tYXJ5KGNvbnN0IGNoYXIgKmVycm9yX3N1bW1hcnkpOworCisgIC8vIFNvbWUgb2YgdGhlIHNhbml0aXplcnMgKGUuZy4gYXNhbi90c2FuKSBtYXkgbWlzcyBidWdzIHRoYXQgaGFwcGVuCisgIC8vIGluIHVuYWxpZ25lZCBsb2Fkcy9zdG9yZXMuIEluIG9yZGVyIHRvIGZpbmQgc3VjaCBidWdzIHJlbGlhYmx5IG9uZSBuZWVkcworICAvLyB0byByZXBsYWNlIHBsYWluIHVuYWxpZ25lZCBsb2Fkcy9zdG9yZXMgd2l0aCB0aGVzZSBjYWxscy4KKyAgdWludDE2X3QgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX2xvYWQxNihjb25zdCB2b2lkICpwKTsKKyAgdWludDMyX3QgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX2xvYWQzMihjb25zdCB2b2lkICpwKTsKKyAgdWludDY0X3QgX19zYW5pdGl6ZXJfdW5hbGlnbmVkX2xvYWQ2NChjb25zdCB2b2lkICpwKTsKKyAgdm9pZCBfX3Nhbml0aXplcl91bmFsaWduZWRfc3RvcmUxNih2b2lkICpwLCB1aW50MTZfdCB4KTsKKyAgdm9pZCBfX3Nhbml0aXplcl91bmFsaWduZWRfc3RvcmUzMih2b2lkICpwLCB1aW50MzJfdCB4KTsKKyAgdm9pZCBfX3Nhbml0aXplcl91bmFsaWduZWRfc3RvcmU2NCh2b2lkICpwLCB1aW50NjRfdCB4KTsKKworICAvLyBBbm5vdGF0ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGNvbnRpZ3VvdXMgY29udGFpbmVyLCBzdWNoIGFzCisgIC8vIHN0ZDo6dmVjdG9yLCBzdGQ6OnN0cmluZyBvciBzaW1pbGFyLgorICAvLyBBIGNvbnRpZ3VvdXMgY29udGFpbmVyIGlzIGEgY29udGFpbmVyIHRoYXQga2VlcHMgYWxsIG9mIGl0cyBlbGVtZW50cworICAvLyBpbiBhIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeS4gVGhlIGNvbnRhaW5lciBvd25zIHRoZSByZWdpb24gb2YgbWVtb3J5CisgIC8vIFtiZWcsIGVuZCk7IHRoZSBtZW1vcnkgW2JlZywgbWlkKSBpcyB1c2VkIHRvIHN0b3JlIHRoZSBjdXJyZW50IGVsZW1lbnRzCisgIC8vIGFuZCB0aGUgbWVtb3J5IFttaWQsIGVuZCkgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBlbGVtZW50czsKKyAgLy8gYmVnIDw9IG1pZCA8PSBlbmQuIEZvciBleGFtcGxlLCBpbiAic3RkOjp2ZWN0b3I8PiB2IgorICAvLyAgIGJlZyA9ICZ2WzBdOworICAvLyAgIGVuZCA9IGJlZyArIHYuY2FwYWNpdHkoKSAqIHNpemVvZih2WzBdKTsKKyAgLy8gICBtaWQgPSBiZWcgKyB2LnNpemUoKSAgICAgKiBzaXplb2YodlswXSk7CisgIC8vCisgIC8vIFRoaXMgYW5ub3RhdGlvbiB0ZWxscyB0aGUgU2FuaXRpemVyIHRvb2wgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisgIC8vIGNvbnRhaW5lciBzbyB0aGF0IHRoZSB0b29sIGNhbiByZXBvcnQgZXJyb3JzIHdoZW4gbWVtb3J5IGZyb20gW21pZCwgZW5kKQorICAvLyBpcyBhY2Nlc3NlZC4gSW5zZXJ0IHRoaXMgYW5ub3RhdGlvbiBpbnRvIG1ldGhvZHMgbGlrZSBwdXNoX2JhY2svcG9wX2JhY2suCisgIC8vIFN1cHBseSB0aGUgb2xkIGFuZCB0aGUgbmV3IHZhbHVlcyBvZiBtaWQgKG9sZF9taWQvbmV3X21pZCkuCisgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlIG1pZCA9PSBlbmQgYW5kIHNvIHNob3VsZCBiZSB0aGUgZmluYWwKKyAgLy8gc3RhdGUgd2hlbiB0aGUgY29udGFpbmVyIGlzIGRlc3Ryb3llZCBvciB3aGVuIGl0IHJlYWxsb2NhdGVzIHRoZSBzdG9yYWdlLgorICAvLworICAvLyBVc2Ugd2l0aCBjYXV0aW9uIGFuZCBkb24ndCB1c2UgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gdmVjdG9yLWxpa2UgY2xhc3Nlcy4KKyAgLy8KKyAgLy8gRm9yIEFkZHJlc3NTYW5pdGl6ZXIsICdiZWcnIHNob3VsZCBiZSA4LWFsaWduZWQgYW5kICdlbmQnIHNob3VsZAorICAvLyBiZSBlaXRoZXIgOC1hbGlnbmVkIG9yIGl0IHNob3VsZCBwb2ludCB0byB0aGUgZW5kIG9mIGEgc2VwYXJhdGUgaGVhcC0sCisgIC8vIHN0YWNrLSwgb3IgZ2xvYmFsLSBhbGxvY2F0ZWQgYnVmZmVyLiBJLmUuIHRoZSBmb2xsb3dpbmcgd2lsbCBub3Qgd29yazoKKyAgLy8gICBpbnQ2NF90IHhbMl07ICAvLyAxNiBieXRlcywgOC1hbGlnbmVkLgorICAvLyAgIGNoYXIgKmJlZyA9IChjaGFyICopJnhbMF07CisgIC8vICAgY2hhciAqZW5kID0gYmVnICsgMTI7ICAvLyBOb3QgOCBhbGlnbmVkLCBub3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorICAvLyBUaGlzIGhvd2V2ZXIgd2lsbCB3b3JrIGZpbmU6CisgIC8vICAgaW50MzJfdCB4WzNdOyAgLy8gMTIgYnl0ZXMsIGJ1dCA4LWFsaWduZWQgdW5kZXIgQWRkcmVzc1Nhbml0aXplci4KKyAgLy8gICBjaGFyICpiZWcgPSAoY2hhciopJnhbMF07CisgIC8vICAgY2hhciAqZW5kID0gYmVnICsgMTI7ICAvLyBOb3QgOC1hbGlnbmVkLCBidXQgaXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorICB2b2lkIF9fc2FuaXRpemVyX2Fubm90YXRlX2NvbnRpZ3VvdXNfY29udGFpbmVyKGNvbnN0IHZvaWQgKmJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb2xkX21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpuZXdfbWlkKTsKKyAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb250aWd1b3VzIGNvbnRhaW5lciBbYmVnLCBlbmQpIGlzIHByb3Blcmx5IHBvaXNvbmVkCisgIC8vIChlLmcuIHdpdGggX19zYW5pdGl6ZXJfYW5ub3RhdGVfY29udGlndW91c19jb250YWluZXIpLCBpLmUuIGlmCisgIC8vICAtIFtiZWcsIG1pZCkgaXMgYWRkcmVzc2FibGUsCisgIC8vICAtIFttaWQsIGVuZCkgaXMgdW5hZGRyZXNzYWJsZS4KKyAgLy8gRnVsbCB2ZXJpZmljYXRpb24gcmVxdWlyZXMgTyhlbmQtYmVnKSB0aW1lOyB0aGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGF2b2lkCisgIC8vIHN1Y2ggY29tcGxleGl0eSBieSB0b3VjaGluZyBvbmx5IHBhcnRzIG9mIHRoZSBjb250YWluZXIgYXJvdW5kIGJlZy9taWQvZW5kLgorICBpbnQgX19zYW5pdGl6ZXJfdmVyaWZ5X2NvbnRpZ3VvdXNfY29udGFpbmVyKGNvbnN0IHZvaWQgKmJlZywgY29uc3Qgdm9pZCAqbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmVuZCk7CisKKyAgLy8gU2ltaWxhciB0byBfX3Nhbml0aXplcl92ZXJpZnlfY29udGlndW91c19jb250YWluZXIgYnV0IHJldHVybnMgdGhlIGFkZHJlc3MKKyAgLy8gb2YgdGhlIGZpcnN0IGltcHJvcGVybHkgcG9pc29uZWQgYnl0ZSBvdGhlcndpc2UuIFJldHVybnMgbnVsbCBpZiB0aGUgYXJlYQorICAvLyBpcyBwb2lzb25lZCBwcm9wZXJseS4KKyAgY29uc3Qgdm9pZCAqX19zYW5pdGl6ZXJfY29udGlndW91c19jb250YWluZXJfZmluZF9iYWRfYWRkcmVzcygKKyAgICAgIGNvbnN0IHZvaWQgKmJlZywgY29uc3Qgdm9pZCAqbWlkLCBjb25zdCB2b2lkICplbmQpOworCisgIC8vIFByaW50IHRoZSBzdGFjayB0cmFjZSBsZWFkaW5nIHRvIHRoaXMgY2FsbC4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgdXNlciBjb2RlLgorICB2b2lkIF9fc2FuaXRpemVyX3ByaW50X3N0YWNrX3RyYWNlKCk7CisKKyAgLy8gU2V0cyB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHJpZ2h0IGJlZm9yZSBkZWF0aCBvbiBlcnJvci4KKyAgLy8gUGFzc2luZyAwIHdpbGwgdW5zZXQgdGhlIGNhbGxiYWNrLgorICB2b2lkIF9fc2FuaXRpemVyX3NldF9kZWF0aF9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKKworICAvLyBJbnRlcmNlcHRvciBob29rcy4KKyAgLy8gV2hlbmV2ZXIgYSBsaWJjIGZ1bmN0aW9uIGludGVyY2VwdG9yIGlzIGNhbGxlZCBpdCBjaGVja3MgaWYgdGhlCisgIC8vIGNvcnJlc3BvbmRpbmcgd2VhayBob29rIGlzIGRlZmluZWQsIGFuZCBpdCBzbyAtLSBjYWxscyBpdC4KKyAgLy8gVGhlIHByaW1hcnkgdXNlIGNhc2UgaXMgZGF0YS1mbG93LWd1aWRlZCBmdXp6aW5nLCB3aGVyZSB0aGUgZnV6emVyIG5lZWRzCisgIC8vIHRvIGtub3cgd2hhdCBpcyBiZWluZyBwYXNzZWQgdG8gbGliYyBmdW5jdGlvbnMsIGUuZy4gbWVtY21wLgorICAvLyBGSVhNRTogaW1wbGVtZW50IG1vcmUgaG9va3MuCisgIHZvaWQgX19zYW5pdGl6ZXJfd2Vha19ob29rX21lbWNtcCh2b2lkICpjYWxsZWRfcGMsIGNvbnN0IHZvaWQgKnMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBuKTsKKyAgdm9pZCBfX3Nhbml0aXplcl93ZWFrX2hvb2tfc3RybmNtcCh2b2lkICpjYWxsZWRfcGMsIGNvbnN0IGNoYXIgKnMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gU0FOSVRJWkVSX0NPTU1PTl9JTlRFUkZBQ0VfREVGU19ICmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9jb3ZlcmFnZV9pbnRlcmZhY2UuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2NvdmVyYWdlX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzExMWIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9jb3ZlcmFnZV9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDY1IEBACisvLz09PS0tIHNhbml0aXplci9jb3ZlcmFnZV9pbnRlcmZhY2UuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIEMrKyAtKi09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKy8vIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vIFB1YmxpYyBpbnRlcmZhY2UgZm9yIHNhbml0aXplciBjb3ZlcmFnZS4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpZm5kZWYgU0FOSVRJWkVSX0NPVkVSQUdfSU5URVJGQUNFX0gKKyNkZWZpbmUgU0FOSVRJWkVSX0NPVkVSQUdfSU5URVJGQUNFX0gKKworI2luY2x1ZGUgPHNhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisgIC8vIEluaXRpYWxpemUgY292ZXJhZ2UuCisgIHZvaWQgX19zYW5pdGl6ZXJfY292X2luaXQoKTsKKyAgLy8gUmVjb3JkIGFuZCBkdW1wIGNvdmVyYWdlIGluZm8uCisgIHZvaWQgX19zYW5pdGl6ZXJfY292X2R1bXAoKTsKKyAgLy8gT3BlbiA8bmFtZT4uc2FuY292LnBhY2tlZCBpbiB0aGUgY292ZXJhZ2UgZGlyZWN0b3J5IGFuZCByZXR1cm4gdGhlIGZpbGUKKyAgLy8gZGVzY3JpcHRvci4gUmV0dXJucyAtMSBvbiBmYWlsdXJlLCBvciBpZiBjb3ZlcmFnZSBkdW1waW5nIGlzIGRpc2FibGVkLgorICAvLyBUaGlzIGlzIGludGVuZGVkIGZvciB1c2UgYnkgc2FuZGJveGluZyBjb2RlLgorICBpbnRwdHJfdCBfX3Nhbml0aXplcl9tYXliZV9vcGVuX2Nvdl9maWxlKGNvbnN0IGNoYXIgKm5hbWUpOworICAvLyBHZXQgdGhlIG51bWJlciBvZiB1bmlxdWUgY292ZXJlZCBibG9ja3MgKG9yIGVkZ2VzKS4KKyAgLy8gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBjb3ZlcmFnZS1kaXJlY3RlZCBpbi1wcm9jZXNzIGZ1enplcnMuCisgIHVpbnRwdHJfdCBfX3Nhbml0aXplcl9nZXRfdG90YWxfdW5pcXVlX2NvdmVyYWdlKCk7CisgIC8vIEdldCB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBpbmRpcmVjdCBjYWxsZXItY2FsbGVlIHBhaXJzLgorICB1aW50cHRyX3QgX19zYW5pdGl6ZXJfZ2V0X3RvdGFsX3VuaXF1ZV9jYWxsZXJfY2FsbGVlX3BhaXJzKCk7CisKKyAgLy8gUmVzZXQgdGhlIGJhc2ljLWJsb2NrIChlZGdlKSBjb3ZlcmFnZSB0byB0aGUgaW5pdGlhbCBzdGF0ZS4KKyAgLy8gVXNlZnVsIGZvciBpbi1wcm9jZXNzIGZ1enppbmcgdG8gc3RhcnQgY29sbGVjdGluZyBjb3ZlcmFnZSBmcm9tIHNjcmF0Y2guCisgIC8vIEV4cGVyaW1lbnRhbCwgd2lsbCBsaWtlbHkgbm90IHdvcmsgZm9yIG11bHRpLXRocmVhZGVkIHByb2Nlc3MuCisgIHZvaWQgX19zYW5pdGl6ZXJfcmVzZXRfY292ZXJhZ2UoKTsKKyAgLy8gU2V0ICpkYXRhIHRvIHRoZSBhcnJheSBvZiBjb3ZlcmVkIFBDcyBhbmQgcmV0dXJuIHRoZSBzaXplIG9mIHRoYXQgYXJyYXkuCisgIC8vIFNvbWUgb2YgdGhlIGVudHJpZXMgaW4gKmRhdGEgd2lsbCBiZSB6ZXJvLgorICB1aW50cHRyX3QgX19zYW5pdGl6ZXJfZ2V0X2NvdmVyYWdlX2d1YXJkcyh1aW50cHRyX3QgKipkYXRhKTsKKworICAvLyBUaGUgY292ZXJhZ2UgaW5zdHJ1bWVudGF0aW9uIG1heSBvcHRpb25hbGx5IHByb3ZpZGUgaW1wcmVjaXNlIGNvdW50ZXJzLgorICAvLyBSYXRoZXIgdGhhbiBleHBvc2luZyB0aGUgY291bnRlciB2YWx1ZXMgdG8gdGhlIHVzZXIgd2UgaW5zdGVhZCBtYXAKKyAgLy8gdGhlIGNvdW50ZXJzIHRvIGEgYml0c2V0LgorICAvLyBFdmVyeSBjb3VudGVyIGlzIGFzc29jaWF0ZWQgd2l0aCA4IGJpdHMgaW4gdGhlIGJpdHNldC4KKyAgLy8gV2UgZGVmaW5lIDggdmFsdWUgcmFuZ2VzOiAxLCAyLCAzLCA0LTcsIDgtMTUsIDE2LTMxLCAzMi0xMjcsIDEyOCsKKyAgLy8gVGhlIGktdGggYml0IGlzIHNldCB0byAxIGlmIHRoZSBjb3VudGVyIHZhbHVlIGlzIGluIHRoZSBpLXRoIHJhbmdlLgorICAvLyBUaGlzIGNvdW50ZXItYmFzZWQgY292ZXJhZ2UgaW1wbGVtZW50YXRpb24gaXMgKm5vdCogdGhyZWFkLXNhZmUuCisKKyAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgY292ZXJhZ2UgY291bnRlcnMuCisgIHVpbnRwdHJfdCBfX3Nhbml0aXplcl9nZXRfbnVtYmVyX29mX2NvdW50ZXJzKCk7CisgIC8vIFVwZGF0ZXMgdGhlIGNvdW50ZXIgJ2JpdHNldCcsIGNsZWFycyB0aGUgY291bnRlcnMgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgorICAvLyBuZXcgYml0cyBpbiAnYml0c2V0Jy4KKyAgLy8gSWYgJ2JpdHNldCcgaXMgbnVsbHB0ciwgb25seSBjbGVhcnMgdGhlIGNvdW50ZXJzLgorICAvLyBPdGhlcndpc2UgJ2JpdHNldCcgc2hvdWxkIGJlIGF0IGxlYXN0CisgIC8vIF9fc2FuaXRpemVyX2dldF9udW1iZXJfb2ZfY291bnRlcnMgYnl0ZXMgbG9uZyBhbmQgOC1hbGlnbmVkLgorICB1aW50cHRyX3QKKyAgX19zYW5pdGl6ZXJfdXBkYXRlX2NvdW50ZXJfYml0c2V0X2FuZF9jbGVhcl9jb3VudGVycyh1aW50OF90ICpiaXRzZXQpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBTQU5JVElaRVJfQ09WRVJBR19JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvZGZzYW5faW50ZXJmYWNlLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci9kZnNhbl9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY2NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvZGZzYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8vPT09LS0gZGZzYW5faW50ZXJmYWNlLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBEYXRhRmxvd1Nhbml0aXplci4KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlci4KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIERGU0FOX0lOVEVSRkFDRV9ICisjZGVmaW5lIERGU0FOX0lOVEVSRkFDRV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzYW5pdGl6ZXIvY29tbW9uX2ludGVyZmFjZV9kZWZzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB1aW50MTZfdCBkZnNhbl9sYWJlbDsKKworLy8vIFN0b3JlcyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsYWJlbCBpZGVudGlmaWVyLiAgQSBsYWJlbAorLy8vIG1heSBiZSBhIGJhc2UgbGFiZWwgY3JlYXRlZCB1c2luZyBkZnNhbl9jcmVhdGVfbGFiZWwsIHdpdGggYXNzb2NpYXRlZAorLy8vIHRleHQgZGVzY3JpcHRpb24gYW5kIHVzZXIgZGF0YSwgb3IgYW4gYXV0b21hdGljYWxseSBjcmVhdGVkIHVuaW9uIGxhYmVsLAorLy8vIHdoaWNoIHJlcHJlc2VudHMgdGhlIHVuaW9uIG9mIHR3byBsYWJlbCBpZGVudGlmaWVycyAod2hpY2ggbWF5IHRoZW1zZWx2ZXMKKy8vLyBiZSBiYXNlIG9yIHVuaW9uIGxhYmVscykuCitzdHJ1Y3QgZGZzYW5fbGFiZWxfaW5mbyB7CisgIC8vIEZpZWxkcyBmb3IgdW5pb24gbGFiZWxzLCBzZXQgdG8gMCBmb3IgYmFzZSBsYWJlbHMuCisgIGRmc2FuX2xhYmVsIGwxOworICBkZnNhbl9sYWJlbCBsMjsKKworICAvLyBGaWVsZHMgZm9yIGJhc2UgbGFiZWxzLgorICBjb25zdCBjaGFyICpkZXNjOworICB2b2lkICp1c2VyZGF0YTsKK307CisKKy8vLyBTaWduYXR1cmUgb2YgdGhlIGNhbGxiYWNrIGFyZ3VtZW50IHRvIGRmc2FuX3NldF93cml0ZV9jYWxsYmFjaygpLgordHlwZWRlZiB2b2lkICgqZGZzYW5fd3JpdGVfY2FsbGJhY2tfdCkoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CisKKy8vLyBDb21wdXRlcyB0aGUgdW5pb24gb2YgXGMgbDEgYW5kIFxjIGwyLCBwb3NzaWJseSBjcmVhdGluZyBhIHVuaW9uIGxhYmVsIGluCisvLy8gdGhlIHByb2Nlc3MuCitkZnNhbl9sYWJlbCBkZnNhbl91bmlvbihkZnNhbl9sYWJlbCBsMSwgZGZzYW5fbGFiZWwgbDIpOworCisvLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGJhc2UgbGFiZWwgd2l0aCB0aGUgZ2l2ZW4gZGVzY3JpcHRpb24gYW5kIHVzZXIgZGF0YS4KK2Rmc2FuX2xhYmVsIGRmc2FuX2NyZWF0ZV9sYWJlbChjb25zdCBjaGFyICpkZXNjLCB2b2lkICp1c2VyZGF0YSk7CisKKy8vLyBTZXRzIHRoZSBsYWJlbCBmb3IgZWFjaCBhZGRyZXNzIGluIFthZGRyLGFkZHIrc2l6ZSkgdG8gXGMgbGFiZWwuCit2b2lkIGRmc2FuX3NldF9sYWJlbChkZnNhbl9sYWJlbCBsYWJlbCwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOworCisvLy8gU2V0cyB0aGUgbGFiZWwgZm9yIGVhY2ggYWRkcmVzcyBpbiBbYWRkcixhZGRyK3NpemUpIHRvIHRoZSB1bmlvbiBvZiB0aGUKKy8vLyBjdXJyZW50IGxhYmVsIGZvciB0aGF0IGFkZHJlc3MgYW5kIFxjIGxhYmVsLgordm9pZCBkZnNhbl9hZGRfbGFiZWwoZGZzYW5fbGFiZWwgbGFiZWwsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKTsKKworLy8vIFJldHJpZXZlcyB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBkYXRhLgorLy8vCisvLy8gVGhlIHR5cGUgb2YgJ2RhdGEnIGlzIGFyYml0cmFyeS4gIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGEgdmFsdWUgb2YgYW55IHR5cGUsCisvLy8gd2hpY2ggY2FuIGJlIHRydW5jYXRlZCBvciBleHRlbmRlZCAoaW1wbGljaXRseSBvciBleHBsaWNpdGx5KSBhcyBuZWNlc3NhcnkuCisvLy8gVGhlIHRydW5jYXRpb24vZXh0ZW5zaW9uIG9wZXJhdGlvbnMgd2lsbCBwcmVzZXJ2ZSB0aGUgbGFiZWwgb2YgdGhlIG9yaWdpbmFsCisvLy8gdmFsdWUuCitkZnNhbl9sYWJlbCBkZnNhbl9nZXRfbGFiZWwobG9uZyBkYXRhKTsKKworLy8vIFJldHJpZXZlcyB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRhIGF0IHRoZSBnaXZlbiBhZGRyZXNzLgorZGZzYW5fbGFiZWwgZGZzYW5fcmVhZF9sYWJlbChjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7CisKKy8vLyBSZXRyaWV2ZXMgYSBwb2ludGVyIHRvIHRoZSBkZnNhbl9sYWJlbF9pbmZvIHN0cnVjdCBmb3IgdGhlIGdpdmVuIGxhYmVsLgorY29uc3Qgc3RydWN0IGRmc2FuX2xhYmVsX2luZm8gKmRmc2FuX2dldF9sYWJlbF9pbmZvKGRmc2FuX2xhYmVsIGxhYmVsKTsKKworLy8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gbGFiZWwgbGFiZWwgY29udGFpbnMgdGhlIGxhYmVsIGVsZW0uCitpbnQgZGZzYW5faGFzX2xhYmVsKGRmc2FuX2xhYmVsIGxhYmVsLCBkZnNhbl9sYWJlbCBlbGVtKTsKKworLy8vIElmIHRoZSBnaXZlbiBsYWJlbCBsYWJlbCBjb250YWlucyBhIGxhYmVsIHdpdGggdGhlIGRlc2NyaXB0aW9uIGRlc2MsIHJldHVybnMKKy8vLyB0aGF0IGxhYmVsLCBlbHNlIHJldHVybnMgMC4KK2Rmc2FuX2xhYmVsIGRmc2FuX2hhc19sYWJlbF93aXRoX2Rlc2MoZGZzYW5fbGFiZWwgbGFiZWwsIGNvbnN0IGNoYXIgKmRlc2MpOworCisvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxhYmVscyBhbGxvY2F0ZWQuCitzaXplX3QgZGZzYW5fZ2V0X2xhYmVsX2NvdW50KHZvaWQpOworCisvLy8gU2V0cyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gY2FsbHMgdG8gd3JpdGUoKS4gIFRoZSBjYWxsYmFjayBpcyBpbnZva2VkCisvLy8gYmVmb3JlIHRoZSB3cml0ZSBpcyBkb25lLiAgVGhlIHdyaXRlIGlzIG5vdCBndWFyYW50ZWVkIHRvIHN1Y2NlZWQgd2hlbiB0aGUKKy8vLyBjYWxsYmFjayBleGVjdXRlcy4gIFBhc3MgaW4gTlVMTCB0byByZW1vdmUgYW55IGNhbGxiYWNrLgordm9pZCBkZnNhbl9zZXRfd3JpdGVfY2FsbGJhY2soZGZzYW5fd3JpdGVfY2FsbGJhY2tfdCBsYWJlbGVkX3dyaXRlX2NhbGxiYWNrKTsKKworLy8vIFdyaXRlcyB0aGUgbGFiZWxzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBwcm9ncmFtIHRvIHRoZSBnaXZlbiBmaWxlCisvLy8gZGVzY3JpcHRvci4gVGhlIGxpbmVzIG9mIHRoZSBvdXRwdXQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKy8vLworLy8vIDxsYWJlbD4gPHBhcmVudCBsYWJlbCAxPiA8cGFyZW50IGxhYmVsIDI+IDxsYWJlbCBkZXNjcmlwdGlvbiBpZiBhbnk+Cit2b2lkIGRmc2FuX2R1bXBfbGFiZWxzKGludCBmZCk7CisKKy8vLyBJbnRlcmNlcHRvciBob29rcy4KKy8vLyBXaGVuZXZlciBhIGRmc2FuJ3MgY3VzdG9tIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGUgY29ycmVzcG9uZGluZworLy8vIGhvb2sgaXMgY2FsbGVkIGl0IG5vbi16ZXJvLiBUaGUgaG9va3Mgc2hvdWxkIGJlIGRlZmluZWQgYnkgdGhlIHVzZXIuCisvLy8gVGhlIHByaW1hcnkgdXNlIGNhc2UgaXMgdGFpbnQtZ3VpZGVkIGZ1enppbmcsIHdoZXJlIHRoZSBmdXp6ZXIKKy8vLyBuZWVkcyB0byBzZWUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgbGFiZWxzLgorLy8vIEZJWE1FOiBpbXBsZW1lbnQgbW9yZSBob29rcy4KK3ZvaWQgZGZzYW5fd2Vha19ob29rX21lbWNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwgZGZzYW5fbGFiZWwgczFfbGFiZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZzYW5fbGFiZWwgczJfbGFiZWwsIGRmc2FuX2xhYmVsIG5fbGFiZWwpOwordm9pZCBkZnNhbl93ZWFrX2hvb2tfc3RybmNtcCh2b2lkICpjYWxsZXJfcGMsIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4sIGRmc2FuX2xhYmVsIHMxX2xhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnNhbl9sYWJlbCBzMl9sYWJlbCwgZGZzYW5fbGFiZWwgbl9sYWJlbCk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8vIGV4dGVybiAiQyIKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIGRmc2FuX3NldF9sYWJlbChkZnNhbl9sYWJlbCBsYWJlbCwgVCAmZGF0YSkgeyAgLy8gTk9MSU5UCisgIGRmc2FuX3NldF9sYWJlbChsYWJlbCwgKHZvaWQgKikmZGF0YSwgc2l6ZW9mKFQpKTsKK30KKworI2VuZGlmCisKKyNlbmRpZiAgLy8gREZTQU5fSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xpbnV4X3N5c2NhbGxfaG9va3MuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xpbnV4X3N5c2NhbGxfaG9va3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTg2N2MxCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvbGludXhfc3lzY2FsbF9ob29rcy5oCkBAIC0wLDAgKzEsMzA3MCBAQAorLy89PT0tLSBsaW51eF9zeXNjYWxsX2hvb2tzLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIHB1YmxpYyBzYW5pdGl6ZXIgaW50ZXJmYWNlLgorLy8KKy8vIFN5c3RlbSBjYWxsIGhhbmRsZXJzLgorLy8KKy8vIEludGVyZmFjZSBtZXRob2RzIGRlY2xhcmVkIGluIHRoaXMgaGVhZGVyIGltcGxlbWVudCBwcmUtIGFuZCBwb3N0LSBzeXNjYWxsCisvLyBhY3Rpb25zIGZvciB0aGUgYWN0aXZlIHNhbml0aXplci4KKy8vIFVzYWdlOgorLy8gICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRmb28oLi4uYXJncy4uLik7CisvLyAgIGxvbmcgcmVzID0gc3lzY2FsbChfX05SX2dldGZvbywgLi4uYXJncy4uLik7CisvLyAgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRmb28ocmVzLCAuLi5hcmdzLi4uKTsKKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisjaWZuZGVmIFNBTklUSVpFUl9MSU5VWF9TWVNDQUxMX0hPT0tTX0gKKyNkZWZpbmUgU0FOSVRJWkVSX0xJTlVYX1NZU0NBTExfSE9PS1NfSAorCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWUodGxvYykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWUoKGxvbmcpKHRsb2MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZShyZXMsIHRsb2MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZShyZXMsIChsb25nKSh0bG9jKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3RpbWUodHB0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0aW1lKChsb25nKSh0cHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0aW1lKHJlcywgdHB0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGltZShyZXMsIChsb25nKSh0cHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0dGltZW9mZGF5KHR2LCB0eikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHRpbWVvZmRheSgobG9uZykodHYpLCAobG9uZykodHopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0dGltZW9mZGF5KHJlcywgdHYsIHR6KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHRpbWVvZmRheShyZXMsIChsb25nKSh0diksIChsb25nKSh0eikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHRpbWVvZmRheSh0diwgdHopIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR0aW1lb2ZkYXkoKGxvbmcpKHR2KSwgKGxvbmcpKHR6KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHRpbWVvZmRheShyZXMsIHR2LCB0eikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR0aW1lb2ZkYXkocmVzLCAobG9uZykodHYpLCAobG9uZykodHopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hZGp0aW1leCh0eGNfcCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FkanRpbWV4KChsb25nKSh0eGNfcCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hZGp0aW1leChyZXMsIHR4Y19wKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FkanRpbWV4KHJlcywgKGxvbmcpKHR4Y19wKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXModGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVzKChsb25nKSh0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVzKHJlcywgdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcyhyZXMsIChsb25nKSh0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0dGlkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR0aWQoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0dGlkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR0aWQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uYW5vc2xlZXAocnF0cCwgcm10cCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25hbm9zbGVlcCgobG9uZykocnF0cCksIChsb25nKShybXRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25hbm9zbGVlcChyZXMsIHJxdHAsIHJtdHApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmFub3NsZWVwKHJlcywgKGxvbmcpKHJxdHApLCAobG9uZykocm10cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FsYXJtKHNlY29uZHMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hbGFybSgobG9uZykoc2Vjb25kcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hbGFybShyZXMsIHNlY29uZHMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWxhcm0ocmVzLCAobG9uZykoc2Vjb25kcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHBpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGlkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBpZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cGlkKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cHBpZCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cHBpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwcGlkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwcGlkKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0dWlkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR1aWQoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0dWlkKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR1aWQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRldWlkKCkgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRldWlkKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGV1aWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGV1aWQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRnaWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRnaWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGVnaWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGVnaWQoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZWdpZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZWdpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJlc3VpZChydWlkLCBldWlkLCBzdWlkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzdWlkKChsb25nKShydWlkKSwgKGxvbmcpKGV1aWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHJlc3VpZChyZXMsIHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cmVzdWlkKHJlcywgKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzZ2lkKHJnaWQsIGVnaWQsIHNnaWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXNnaWQoKGxvbmcpKHJnaWQpLCAobG9uZykoZWdpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmVzZ2lkKHJlcywgcmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRyZXNnaWQocmVzLCAobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwZ2lkKHBpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHBnaWQoKGxvbmcpKHBpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwZ2lkKHJlcywgcGlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBnaWQocmVzLCAobG9uZykocGlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cGdycCgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGdycCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwZ3JwKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwZ3JwKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0c2lkKHBpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHNpZCgobG9uZykocGlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHNpZChyZXMsIHBpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRzaWQocmVzLCAobG9uZykocGlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Z3JvdXBzKGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdyb3VwcygobG9uZykoZ2lkc2V0c2l6ZSksIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z3JvdXBzKHJlcywgZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdyb3VwcyhyZXMsIChsb25nKShnaWRzZXRzaXplKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZWdpZChyZ2lkLCBlZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVnaWQoKGxvbmcpKHJnaWQpLCAobG9uZykoZWdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZWdpZChyZXMsIHJnaWQsIGVnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVnaWQocmVzLCAobG9uZykocmdpZCksIChsb25nKShlZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0Z2lkKGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGdpZCgobG9uZykoZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGdpZChyZXMsIGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRnaWQocmVzLCAobG9uZykoZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmV1aWQocnVpZCwgZXVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJldWlkKChsb25nKShydWlkKSwgKGxvbmcpKGV1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmV1aWQocmVzLCBydWlkLCBldWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJldWlkKHJlcywgKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHVpZCh1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR1aWQoKGxvbmcpKHVpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXR1aWQocmVzLCB1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0dWlkKHJlcywgKGxvbmcpKHVpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc3VpZChydWlkLCBldWlkLCBzdWlkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzdWlkKChsb25nKShydWlkKSwgKGxvbmcpKGV1aWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlc3VpZChyZXMsIHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzdWlkKHJlcywgKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVzZ2lkKHJnaWQsIGVnaWQsIHNnaWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXNnaWQoKGxvbmcpKHJnaWQpLCAobG9uZykoZWdpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzZ2lkKHJlcywgcmdpZCwgZWdpZCwgc2dpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXNnaWQocmVzLCAobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRmc3VpZCh1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc3VpZCgobG9uZykodWlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGZzdWlkKHJlcywgdWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzdWlkKHJlcywgKGxvbmcpKHVpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzZ2lkKGdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzZ2lkKChsb25nKShnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnNnaWQocmVzLCBnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnNnaWQocmVzLCAobG9uZykoZ2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cGdpZChwaWQsIHBnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRwZ2lkKChsb25nKShwaWQpLCAobG9uZykocGdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRwZ2lkKHJlcywgcGlkLCBwZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHBnaWQocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHBnaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRzaWQoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHNpZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRzaWQocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHNpZChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGdyb3VwcyhnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRncm91cHMoKGxvbmcpKGdpZHNldHNpemUpLCAobG9uZykoZ3JvdXBsaXN0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGdyb3VwcyhyZXMsIGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRncm91cHMocmVzLCAobG9uZykoZ2lkc2V0c2l6ZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXBsaXN0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWNjdChuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjdCgobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hY2N0KHJlcywgbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2N0KHJlcywgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jYXBnZXQoaGVhZGVyLCBkYXRhcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2FwZ2V0KChsb25nKShoZWFkZXIpLCAobG9uZykoZGF0YXB0cikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jYXBnZXQocmVzLCBoZWFkZXIsIGRhdGFwdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2FwZ2V0KHJlcywgKGxvbmcpKGhlYWRlciksIChsb25nKShkYXRhcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2Fwc2V0KGhlYWRlciwgZGF0YSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NhcHNldCgobG9uZykoaGVhZGVyKSwgKGxvbmcpKGRhdGEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2Fwc2V0KHJlcywgaGVhZGVyLCBkYXRhKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2NhcHNldChyZXMsIChsb25nKShoZWFkZXIpLCAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BlcnNvbmFsaXR5KHBlcnNvbmFsaXR5KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGVyc29uYWxpdHkoKGxvbmcpKHBlcnNvbmFsaXR5KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BlcnNvbmFsaXR5KHJlcywgcGVyc29uYWxpdHkpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGVyc29uYWxpdHkocmVzLCAobG9uZykocGVyc29uYWxpdHkpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdwZW5kaW5nKHNldCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ3BlbmRpbmcoKGxvbmcpKHNldCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWdwZW5kaW5nKHJlcywgc2V0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ3BlbmRpbmcocmVzLCAobG9uZykoc2V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lncHJvY21hc2soaG93LCBzZXQsIG9zZXQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWdwcm9jbWFzaygobG9uZykoaG93KSwgKGxvbmcpKHNldCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3NldCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaWdwcm9jbWFzayhyZXMsIGhvdywgc2V0LCBvc2V0KSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ3Byb2NtYXNrKHJlcywgKGxvbmcpKGhvdyksIChsb25nKShzZXQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvc2V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0aXRpbWVyKHdoaWNoLCB2YWx1ZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGl0aW1lcigobG9uZykod2hpY2gpLCAobG9uZykodmFsdWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0aXRpbWVyKHJlcywgd2hpY2gsIHZhbHVlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGl0aW1lcihyZXMsIChsb25nKSh3aGljaCksIChsb25nKSh2YWx1ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGl0aW1lcih3aGljaCwgdmFsdWUsIG92YWx1ZSkgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRpdGltZXIoKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHZhbHVlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3ZhbHVlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGl0aW1lcihyZXMsIHdoaWNoLCB2YWx1ZSwgb3ZhbHVlKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRpdGltZXIocmVzLCAobG9uZykod2hpY2gpLCAobG9uZykodmFsdWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3ZhbHVlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJfY3JlYXRlKHdoaWNoX2Nsb2NrLCB0aW1lcl9ldmVudF9zcGVjLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkX3RpbWVyX2lkKSAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2NyZWF0ZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKSh3aGljaF9jbG9jayksIChsb25nKSh0aW1lcl9ldmVudF9zcGVjKSwgKGxvbmcpKGNyZWF0ZWRfdGltZXJfaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJfY3JlYXRlKCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVzLCB3aGljaF9jbG9jaywgdGltZXJfZXZlbnRfc3BlYywgY3JlYXRlZF90aW1lcl9pZCkgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfY3JlYXRlKHJlcywgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRpbWVyX2V2ZW50X3NwZWMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY3JlYXRlZF90aW1lcl9pZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyX2dldHRpbWUodGltZXJfaWQsIHNldHRpbmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9nZXR0aW1lKChsb25nKSh0aW1lcl9pZCksIChsb25nKShzZXR0aW5nKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyX2dldHRpbWUocmVzLCB0aW1lcl9pZCwgc2V0dGluZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9nZXR0aW1lKHJlcywgKGxvbmcpKHRpbWVyX2lkKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNldHRpbmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcl9nZXRvdmVycnVuKHRpbWVyX2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJfZ2V0b3ZlcnJ1bigobG9uZykodGltZXJfaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJfZ2V0b3ZlcnJ1bihyZXMsIHRpbWVyX2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2dldG92ZXJydW4ocmVzLCAobG9uZykodGltZXJfaWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcl9zZXR0aW1lKHRpbWVyX2lkLCBmbGFncywgbmV3X3NldHRpbmcsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9zZXR0aW5nKSAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX3NldHRpbWUoKGxvbmcpKHRpbWVyX2lkKSwgKGxvbmcpKGZsYWdzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19zZXR0aW5nKSwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9sZF9zZXR0aW5nKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyX3NldHRpbWUocmVzLCB0aW1lcl9pZCwgZmxhZ3MsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zZXR0aW5nLCBvbGRfc2V0dGluZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9zZXR0aW1lKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHRpbWVyX2lkKSwgKGxvbmcpKGZsYWdzKSwgKGxvbmcpKG5ld19zZXR0aW5nKSwgICAgICAgICBcCisgICAgICAobG9uZykob2xkX3NldHRpbmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90aW1lcl9kZWxldGUodGltZXJfaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9kZWxldGUoKGxvbmcpKHRpbWVyX2lkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyX2RlbGV0ZShyZXMsIHRpbWVyX2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2RlbGV0ZShyZXMsIChsb25nKSh0aW1lcl9pZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb2NrX3NldHRpbWUod2hpY2hfY2xvY2ssIHRwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfc2V0dGltZSgobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykodHApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvY2tfc2V0dGltZShyZXMsIHdoaWNoX2Nsb2NrLCB0cCkgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19zZXR0aW1lKHJlcywgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb2NrX2dldHRpbWUod2hpY2hfY2xvY2ssIHRwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfZ2V0dGltZSgobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykodHApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvY2tfZ2V0dGltZShyZXMsIHdoaWNoX2Nsb2NrLCB0cCkgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19nZXR0aW1lKHJlcywgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb2NrX2FkanRpbWUod2hpY2hfY2xvY2ssIHR4KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfYWRqdGltZSgobG9uZykod2hpY2hfY2xvY2spLCAobG9uZykodHgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvY2tfYWRqdGltZShyZXMsIHdoaWNoX2Nsb2NrLCB0eCkgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19hZGp0aW1lKHJlcywgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0eCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nsb2NrX2dldHJlcyh3aGljaF9jbG9jaywgdHApIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19nZXRyZXMoKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKHRwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nsb2NrX2dldHJlcyhyZXMsIHdoaWNoX2Nsb2NrLCB0cCkgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19nZXRyZXMocmVzLCAobG9uZykod2hpY2hfY2xvY2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodHApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jbG9ja19uYW5vc2xlZXAod2hpY2hfY2xvY2ssIGZsYWdzLCBycXRwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybXRwKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19uYW5vc2xlZXAoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHdoaWNoX2Nsb2NrKSwgKGxvbmcpKGZsYWdzKSwgKGxvbmcpKHJxdHApLCAobG9uZykocm10cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9ja19uYW5vc2xlZXAocmVzLCB3aGljaF9jbG9jaywgZmxhZ3MsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycXRwLCBybXRwKSAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19uYW5vc2xlZXAoICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKSh3aGljaF9jbG9jayksIChsb25nKShmbGFncyksIChsb25nKShycXRwKSwgKGxvbmcpKHJtdHApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uaWNlKGluY3JlbWVudCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25pY2UoKGxvbmcpKGluY3JlbWVudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uaWNlKHJlcywgaW5jcmVtZW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25pY2UocmVzLCAobG9uZykoaW5jcmVtZW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfc2V0c2NoZWR1bGVyKHBpZCwgcG9saWN5LCBwYXJhbSkgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0c2NoZWR1bGVyKChsb25nKShwaWQpLCAobG9uZykocG9saWN5KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocGFyYW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfc2V0c2NoZWR1bGVyKHJlcywgcGlkLCBwb2xpY3ksIHBhcmFtKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3NldHNjaGVkdWxlciggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShwb2xpY3kpLCAobG9uZykocGFyYW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9zZXRwYXJhbShwaWQsIHBhcmFtKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0cGFyYW0oKGxvbmcpKHBpZCksIChsb25nKShwYXJhbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9zZXRwYXJhbShyZXMsIHBpZCwgcGFyYW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfc2V0cGFyYW0ocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHBhcmFtKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfZ2V0c2NoZWR1bGVyKHBpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldHNjaGVkdWxlcigobG9uZykocGlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NjaGVkX2dldHNjaGVkdWxlcihyZXMsIHBpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRzY2hlZHVsZXIocmVzLCAobG9uZykocGlkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfZ2V0cGFyYW0ocGlkLCBwYXJhbSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldHBhcmFtKChsb25nKShwaWQpLCAobG9uZykocGFyYW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfZ2V0cGFyYW0ocmVzLCBwaWQsIHBhcmFtKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldHBhcmFtKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShwYXJhbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX3NldGFmZmluaXR5KHBpZCwgbGVuLCB1c2VyX21hc2tfcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfc2V0YWZmaW5pdHkoKGxvbmcpKHBpZCksIChsb25nKShsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVzZXJfbWFza19wdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfc2V0YWZmaW5pdHkocmVzLCBwaWQsIGxlbiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9tYXNrX3B0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9zZXRhZmZpbml0eSggICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykocGlkKSwgKGxvbmcpKGxlbiksIChsb25nKSh1c2VyX21hc2tfcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfZ2V0YWZmaW5pdHkocGlkLCBsZW4sIHVzZXJfbWFza19wdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRhZmZpbml0eSgobG9uZykocGlkKSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXNlcl9tYXNrX3B0cikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9nZXRhZmZpbml0eShyZXMsIHBpZCwgbGVuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX21hc2tfcHRyKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldGFmZmluaXR5KCAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShwaWQpLCAobG9uZykobGVuKSwgKGxvbmcpKHVzZXJfbWFza19wdHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF95aWVsZCgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF95aWVsZCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF95aWVsZChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfeWllbGQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4KHBvbGljeSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9tYXgoKGxvbmcpKHBvbGljeSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4KHJlcywgcG9saWN5KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9tYXgocmVzLCAobG9uZykocG9saWN5KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihwb2xpY3kpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKChsb25nKShwb2xpY3kpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihyZXMsIHBvbGljeSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluKHJlcywgKGxvbmcpKHBvbGljeSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NjaGVkX3JyX2dldF9pbnRlcnZhbChwaWQsIGludGVydmFsKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfcnJfZ2V0X2ludGVydmFsKChsb25nKShwaWQpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpbnRlcnZhbCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwocmVzLCBwaWQsIGludGVydmFsKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3JyX2dldF9pbnRlcnZhbChyZXMsIChsb25nKShwaWQpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoaW50ZXJ2YWwpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRwcmlvcml0eSh3aGljaCwgd2hvLCBuaWNldmFsKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cHJpb3JpdHkoKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmljZXZhbCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRwcmlvcml0eShyZXMsIHdoaWNoLCB3aG8sIG5pY2V2YWwpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cHJpb3JpdHkocmVzLCAobG9uZykod2hpY2gpLCAobG9uZykod2hvKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmljZXZhbCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHByaW9yaXR5KHdoaWNoLCB3aG8pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwcmlvcml0eSgobG9uZykod2hpY2gpLCAobG9uZykod2hvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHByaW9yaXR5KHJlcywgd2hpY2gsIHdobykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwcmlvcml0eShyZXMsIChsb25nKSh3aGljaCksIChsb25nKSh3aG8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaHV0ZG93bihhcmcwLCBhcmcxKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2h1dGRvd24oKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaHV0ZG93bihyZXMsIGFyZzAsIGFyZzEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2h1dGRvd24ocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVib290KG1hZ2ljMSwgbWFnaWMyLCBjbWQsIGFyZykgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVib290KChsb25nKShtYWdpYzEpLCAobG9uZykobWFnaWMyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWJvb3QocmVzLCBtYWdpYzEsIG1hZ2ljMiwgY21kLCBhcmcpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWJvb3QocmVzLCAobG9uZykobWFnaWMxKSwgKGxvbmcpKG1hZ2ljMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVzdGFydF9zeXNjYWxsKCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Jlc3RhcnRfc3lzY2FsbCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZXN0YXJ0X3N5c2NhbGwocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Jlc3RhcnRfc3lzY2FsbChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2tleGVjX2xvYWQoZW50cnksIG5yX3NlZ21lbnRzLCBzZWdtZW50cywgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfa2V4ZWNfbG9hZCgobG9uZykoZW50cnkpLCAobG9uZykobnJfc2VnbWVudHMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2VnbWVudHMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfa2V4ZWNfbG9hZChyZXMsIGVudHJ5LCBucl9zZWdtZW50cywgc2VnbWVudHMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2tleGVjX2xvYWQocmVzLCAobG9uZykoZW50cnkpLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShucl9zZWdtZW50cyksICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2VnbWVudHMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9leGl0KGVycm9yX2NvZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9leGl0KChsb25nKShlcnJvcl9jb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2V4aXQocmVzLCBlcnJvcl9jb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2V4aXQocmVzLCAobG9uZykoZXJyb3JfY29kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2V4aXRfZ3JvdXAoZXJyb3JfY29kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V4aXRfZ3JvdXAoKGxvbmcpKGVycm9yX2NvZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXhpdF9ncm91cChyZXMsIGVycm9yX2NvZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXhpdF9ncm91cChyZXMsIChsb25nKShlcnJvcl9jb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfd2FpdDQocGlkLCBzdGF0X2FkZHIsIG9wdGlvbnMsIHJ1KSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93YWl0NCgobG9uZykocGlkKSwgKGxvbmcpKHN0YXRfYWRkciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0aW9ucyksIChsb25nKShydSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF93YWl0NChyZXMsIHBpZCwgc3RhdF9hZGRyLCBvcHRpb25zLCBydSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dhaXQ0KHJlcywgKGxvbmcpKHBpZCksIChsb25nKShzdGF0X2FkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRpb25zKSwgKGxvbmcpKHJ1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfd2FpdGlkKHdoaWNoLCBwaWQsIGluZm9wLCBvcHRpb25zLCBydSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXRpZCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykod2hpY2gpLCAobG9uZykocGlkKSwgKGxvbmcpKGluZm9wKSwgKGxvbmcpKG9wdGlvbnMpLCAobG9uZykocnUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfd2FpdGlkKHJlcywgd2hpY2gsIHBpZCwgaW5mb3AsIG9wdGlvbnMsIHJ1KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dhaXRpZChyZXMsIChsb25nKSh3aGljaCksIChsb25nKShwaWQpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpbmZvcCksIChsb25nKShvcHRpb25zKSwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHJ1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfd2FpdHBpZChwaWQsIHN0YXRfYWRkciwgb3B0aW9ucykgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXRwaWQoKGxvbmcpKHBpZCksIChsb25nKShzdGF0X2FkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0aW9ucykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF93YWl0cGlkKHJlcywgcGlkLCBzdGF0X2FkZHIsIG9wdGlvbnMpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdHBpZChyZXMsIChsb25nKShwaWQpLCAobG9uZykoc3RhdF9hZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRpb25zKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0X3RpZF9hZGRyZXNzKHRpZHB0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldF90aWRfYWRkcmVzcygobG9uZykodGlkcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldF90aWRfYWRkcmVzcyhyZXMsIHRpZHB0cikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRfdGlkX2FkZHJlc3MocmVzLCAobG9uZykodGlkcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW5pdF9tb2R1bGUodW1vZCwgbGVuLCB1YXJncykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5pdF9tb2R1bGUoKGxvbmcpKHVtb2QpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1YXJncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbml0X21vZHVsZShyZXMsIHVtb2QsIGxlbiwgdWFyZ3MpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbml0X21vZHVsZShyZXMsIChsb25nKSh1bW9kKSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVhcmdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZGVsZXRlX21vZHVsZShuYW1lX3VzZXIsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZGVsZXRlX21vZHVsZSgobG9uZykobmFtZV91c2VyKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2RlbGV0ZV9tb2R1bGUocmVzLCBuYW1lX3VzZXIsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2RlbGV0ZV9tb2R1bGUocmVzLCAobG9uZykobmFtZV91c2VyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3Byb2NtYXNrKGhvdywgc2V0LCBvc2V0LCBzaWdzZXRzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncHJvY21hc2soICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykoaG93KSwgKGxvbmcpKHNldCksIChsb25nKShvc2V0KSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcnRfc2lncHJvY21hc2socmVzLCBob3csIHNldCwgb3NldCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnc2V0c2l6ZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdwcm9jbWFzayggICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoaG93KSwgKGxvbmcpKHNldCksIChsb25nKShvc2V0KSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ydF9zaWdwZW5kaW5nKHNldCwgc2lnc2V0c2l6ZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3BlbmRpbmcoKGxvbmcpKHNldCksIChsb25nKShzaWdzZXRzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3J0X3NpZ3BlbmRpbmcocmVzLCBzZXQsIHNpZ3NldHNpemUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lncGVuZGluZyhyZXMsIChsb25nKShzZXQpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2lnc2V0c2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3NpZ3RpbWVkd2FpdCh1dGhlc2UsIHVpbmZvLCB1dHMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldHNpemUpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3NpZ3RpbWVkd2FpdCggICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykodXRoZXNlKSwgKGxvbmcpKHVpbmZvKSwgKGxvbmcpKHV0cyksIChsb25nKShzaWdzZXRzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3J0X3NpZ3RpbWVkd2FpdChyZXMsIHV0aGVzZSwgdWluZm8sIHV0cywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldHNpemUpICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3RpbWVkd2FpdCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHV0aGVzZSksIChsb25nKSh1aW5mbyksIChsb25nKSh1dHMpLCAobG9uZykoc2lnc2V0c2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3J0X3Rnc2lncXVldWVpbmZvKHRnaWQsIHBpZCwgc2lnLCB1aW5mbykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3Rnc2lncXVldWVpbmZvKChsb25nKSh0Z2lkKSwgKGxvbmcpKHBpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2lnKSwgKGxvbmcpKHVpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3J0X3Rnc2lncXVldWVpbmZvKHJlcywgdGdpZCwgcGlkLCBzaWcsIHVpbmZvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3Rnc2lncXVldWVpbmZvKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykodGdpZCksIChsb25nKShwaWQpLCAobG9uZykoc2lnKSwgKGxvbmcpKHVpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfa2lsbChwaWQsIHNpZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tpbGwoKGxvbmcpKHBpZCksIChsb25nKShzaWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfa2lsbChyZXMsIHBpZCwgc2lnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2tpbGwocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHNpZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Rna2lsbCh0Z2lkLCBwaWQsIHNpZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Rna2lsbCgobG9uZykodGdpZCksIChsb25nKShwaWQpLCAobG9uZykoc2lnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Rna2lsbChyZXMsIHRnaWQsIHBpZCwgc2lnKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90Z2tpbGwocmVzLCAobG9uZykodGdpZCksIChsb25nKShwaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2lnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGtpbGwocGlkLCBzaWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90a2lsbCgobG9uZykocGlkKSwgKGxvbmcpKHNpZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90a2lsbChyZXMsIHBpZCwgc2lnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RraWxsKHJlcywgKGxvbmcpKHBpZCksIChsb25nKShzaWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ydF9zaWdxdWV1ZWluZm8ocGlkLCBzaWcsIHVpbmZvKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF9zaWdxdWV1ZWluZm8oKGxvbmcpKHBpZCksIChsb25nKShzaWcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1aW5mbykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF9zaWdxdWV1ZWluZm8ocmVzLCBwaWQsIHNpZywgdWluZm8pICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdxdWV1ZWluZm8ocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKHNpZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1aW5mbykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NnZXRtYXNrKCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NnZXRtYXNrKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NnZXRtYXNrKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZ2V0bWFzayhyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NzZXRtYXNrKG5ld21hc2spIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zc2V0bWFzaygobG9uZykobmV3bWFzaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zc2V0bWFzayhyZXMsIG5ld21hc2spIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3NldG1hc2socmVzLCAobG9uZykobmV3bWFzaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ25hbChzaWcsIGhhbmRsZXIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWwoKGxvbmcpKHNpZyksIChsb25nKShoYW5kbGVyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ25hbChyZXMsIHNpZywgaGFuZGxlcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWduYWwocmVzLCAobG9uZykoc2lnKSwgKGxvbmcpKGhhbmRsZXIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wYXVzZSgpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGF1c2UoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGF1c2UocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BhdXNlKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3luYygpIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3luYygpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeW5jKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW5jKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnN5bmMoZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3luYygobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnN5bmMocmVzLCBmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3luYyhyZXMsIChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZkYXRhc3luYyhmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZkYXRhc3luYygobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmRhdGFzeW5jKHJlcywgZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmRhdGFzeW5jKHJlcywgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYmRmbHVzaChmdW5jLCBkYXRhKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYmRmbHVzaCgobG9uZykoZnVuYyksIChsb25nKShkYXRhKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2JkZmx1c2gocmVzLCBmdW5jLCBkYXRhKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2JkZmx1c2gocmVzLCAobG9uZykoZnVuYyksIChsb25nKShkYXRhKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbW91bnQoZGV2X25hbWUsIGRpcl9uYW1lLCB0eXBlLCBmbGFncywgZGF0YSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21vdW50KChsb25nKShkZXZfbmFtZSksIChsb25nKShkaXJfbmFtZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHR5cGUpLCAobG9uZykoZmxhZ3MpLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tb3VudChyZXMsIGRldl9uYW1lLCBkaXJfbmFtZSwgdHlwZSwgZmxhZ3MsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbW91bnQocmVzLCAobG9uZykoZGV2X25hbWUpLCAobG9uZykoZGlyX25hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0eXBlKSwgKGxvbmcpKGZsYWdzKSwgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZGF0YSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Vtb3VudChuYW1lLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Vtb3VudCgobG9uZykobmFtZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bW91bnQocmVzLCBuYW1lLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bW91bnQocmVzLCAobG9uZykobmFtZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZHVtb3VudChuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkdW1vdW50KChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZHVtb3VudChyZXMsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkdW1vdW50KHJlcywgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90cnVuY2F0ZShwYXRoLCBsZW5ndGgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90cnVuY2F0ZSgobG9uZykocGF0aCksIChsb25nKShsZW5ndGgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdHJ1bmNhdGUocmVzLCBwYXRoLCBsZW5ndGgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdHJ1bmNhdGUocmVzLCAobG9uZykocGF0aCksIChsb25nKShsZW5ndGgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mdHJ1bmNhdGUoZmQsIGxlbmd0aCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Z0cnVuY2F0ZSgobG9uZykoZmQpLCAobG9uZykobGVuZ3RoKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Z0cnVuY2F0ZShyZXMsIGZkLCBsZW5ndGgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnRydW5jYXRlKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGxlbmd0aCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N0YXQoZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0KChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0YXQocmVzLCBmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zdGF0ZnMocGF0aCwgYnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdGZzKChsb25nKShwYXRoKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zdGF0ZnMocmVzLCBwYXRoLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdGZzKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3RhdGZzNjQocGF0aCwgc3osIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXRmczY0KChsb25nKShwYXRoKSwgKGxvbmcpKHN6KSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zdGF0ZnM2NChyZXMsIHBhdGgsIHN6LCBidWYpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXRmczY0KHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykoc3opLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc3RhdGZzKGZkLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdGZzKChsb25nKShmZCksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnN0YXRmcyhyZXMsIGZkLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXRmcyhyZXMsIChsb25nKShmZCksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc3RhdGZzNjQoZmQsIHN6LCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdGZzNjQoKGxvbmcpKGZkKSwgKGxvbmcpKHN6KSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc3RhdGZzNjQocmVzLCBmZCwgc3osIGJ1ZikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXRmczY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHN6KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xzdGF0KGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHN0YXQoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbHN0YXQocmVzLCBmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc3RhdChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnN0YXQoZmQsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdCgobG9uZykoZmQpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mc3RhdChyZXMsIGZkLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uZXdzdGF0KGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3c3RhdCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZXdzdGF0KHJlcywgZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3c3RhdChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbmV3bHN0YXQoZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdsc3RhdCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uZXdsc3RhdChyZXMsIGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld2xzdGF0KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uZXdmc3RhdChmZCwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld2ZzdGF0KChsb25nKShmZCksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25ld2ZzdGF0KHJlcywgZmQsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3ZnN0YXQocmVzLCAobG9uZykoZmQpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VzdGF0KGRldiwgdWJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VzdGF0KChsb25nKShkZXYpLCAobG9uZykodWJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91c3RhdChyZXMsIGRldiwgdWJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91c3RhdChyZXMsIChsb25nKShkZXYpLCAobG9uZykodWJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N0YXQ2NChmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXQ2NCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zdGF0NjQocmVzLCBmaWxlbmFtZSwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0NjQocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZzdGF0NjQoZmQsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdDY0KChsb25nKShmZCksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzdGF0NjQocmVzLCBmZCwgc3RhdGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdDY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHN0YXRidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sc3RhdDY0KGZpbGVuYW1lLCBzdGF0YnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHN0YXQ2NCgobG9uZykoZmlsZW5hbWUpLCAobG9uZykoc3RhdGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sc3RhdDY0KHJlcywgZmlsZW5hbWUsIHN0YXRidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbHN0YXQ2NChyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKShzdGF0YnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0eGF0dHIocGF0aCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0eGF0dHIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIChsb25nKSh2YWx1ZSksIChsb25nKShzaXplKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHhhdHRyKHJlcywgcGF0aCwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbHNldHhhdHRyKHBhdGgsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xzZXR4YXR0ciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbHNldHhhdHRyKHJlcywgcGF0aCwgbmFtZSwgdmFsdWUsIHNpemUsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc2V0eGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnNldHhhdHRyKGZkLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc2V0eGF0dHIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShmZCksIChsb25nKShuYW1lKSwgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnNldHhhdHRyKHJlcywgZmQsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc2V0eGF0dHIocmVzLCAobG9uZykoZmQpLCAobG9uZykobmFtZSksICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0eGF0dHIocGF0aCwgbmFtZSwgdmFsdWUsIHNpemUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHhhdHRyKChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0eGF0dHIocmVzLCBwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sZ2V0eGF0dHIocGF0aCwgbmFtZSwgdmFsdWUsIHNpemUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xnZXR4YXR0cigobG9uZykocGF0aCksIChsb25nKShuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sZ2V0eGF0dHIocmVzLCBwYXRoLCBuYW1lLCB2YWx1ZSwgc2l6ZSkgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xnZXR4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZnZXR4YXR0cihmZCwgbmFtZSwgdmFsdWUsIHNpemUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZnZXR4YXR0cigobG9uZykoZmQpLCAobG9uZykobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZhbHVlKSwgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmdldHhhdHRyKHJlcywgZmQsIG5hbWUsIHZhbHVlLCBzaXplKSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmdldHhhdHRyKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmFsdWUpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xpc3R4YXR0cihwYXRoLCBsaXN0LCBzaXplKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGlzdHhhdHRyKChsb25nKShwYXRoKSwgKGxvbmcpKGxpc3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xpc3R4YXR0cihyZXMsIHBhdGgsIGxpc3QsIHNpemUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlzdHhhdHRyKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykobGlzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGxpc3R4YXR0cihwYXRoLCBsaXN0LCBzaXplKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGxpc3R4YXR0cigobG9uZykocGF0aCksIChsb25nKShsaXN0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGxpc3R4YXR0cihyZXMsIHBhdGgsIGxpc3QsIHNpemUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGxpc3R4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKGxpc3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mbGlzdHhhdHRyKGZkLCBsaXN0LCBzaXplKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmxpc3R4YXR0cigobG9uZykoZmQpLCAobG9uZykobGlzdCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZsaXN0eGF0dHIocmVzLCBmZCwgbGlzdCwgc2l6ZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mbGlzdHhhdHRyKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGxpc3QpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZW1vdmV4YXR0cihwYXRoLCBuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVtb3ZleGF0dHIoKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZW1vdmV4YXR0cihyZXMsIHBhdGgsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVtb3ZleGF0dHIocmVzLCAobG9uZykocGF0aCksIChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbHJlbW92ZXhhdHRyKHBhdGgsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9scmVtb3ZleGF0dHIoKGxvbmcpKHBhdGgpLCAobG9uZykobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9scmVtb3ZleGF0dHIocmVzLCBwYXRoLCBuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xyZW1vdmV4YXR0cihyZXMsIChsb25nKShwYXRoKSwgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mcmVtb3ZleGF0dHIoZmQsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mcmVtb3ZleGF0dHIoKGxvbmcpKGZkKSwgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnJlbW92ZXhhdHRyKHJlcywgZmQsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnJlbW92ZXhhdHRyKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9icmsoYnJrKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYnJrKChsb25nKShicmspKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfYnJrKHJlcywgYnJrKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2JyayhyZXMsIChsb25nKShicmspKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcHJvdGVjdChzdGFydCwgbGVuLCBwcm90KSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXByb3RlY3QoKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocHJvdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcHJvdGVjdChyZXMsIHN0YXJ0LCBsZW4sIHByb3QpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXByb3RlY3QocmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocHJvdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21yZW1hcChhZGRyLCBvbGRfbGVuLCBuZXdfbGVuLCBmbGFncywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FkZHIpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcmVtYXAoKGxvbmcpKGFkZHIpLCAobG9uZykob2xkX2xlbiksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdfbGVuKSwgKGxvbmcpKGZsYWdzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobmV3X2FkZHIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXJlbWFwKHJlcywgYWRkciwgb2xkX2xlbiwgbmV3X2xlbiwgZmxhZ3MsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYWRkcikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21yZW1hcChyZXMsIChsb25nKShhZGRyKSwgKGxvbmcpKG9sZF9sZW4pLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19sZW4pLCAobG9uZykoZmxhZ3MpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdfYWRkcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlbWFwX2ZpbGVfcGFnZXMoc3RhcnQsIHNpemUsIHByb3QsIHBnb2ZmLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVtYXBfZmlsZV9wYWdlcyggICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykoc3RhcnQpLCAobG9uZykoc2l6ZSksIChsb25nKShwcm90KSwgKGxvbmcpKHBnb2ZmKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlbWFwX2ZpbGVfcGFnZXMocmVzLCBzdGFydCwgc2l6ZSwgcHJvdCwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ29mZiwgZmxhZ3MpICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlbWFwX2ZpbGVfcGFnZXMocmVzLCAobG9uZykoc3RhcnQpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZSksIChsb25nKShwcm90KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwZ29mZiksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21zeW5jKHN0YXJ0LCBsZW4sIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXN5bmMoKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tc3luYyhyZXMsIHN0YXJ0LCBsZW4sIGZsYWdzKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXN5bmMocmVzLCAobG9uZykoc3RhcnQpLCAobG9uZykobGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tdW5tYXAoYWRkciwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXVubWFwKChsb25nKShhZGRyKSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tdW5tYXAocmVzLCBhZGRyLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXVubWFwKHJlcywgKGxvbmcpKGFkZHIpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWxvY2soc3RhcnQsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21sb2NrKChsb25nKShzdGFydCksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWxvY2socmVzLCBzdGFydCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21sb2NrKHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX211bmxvY2soc3RhcnQsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX211bmxvY2soKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tdW5sb2NrKHJlcywgc3RhcnQsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5sb2NrKHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21sb2NrYWxsKGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWxvY2thbGwoKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21sb2NrYWxsKHJlcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWxvY2thbGwocmVzLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tdW5sb2NrYWxsKCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX211bmxvY2thbGwoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXVubG9ja2FsbChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXVubG9ja2FsbChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21hZHZpc2Uoc3RhcnQsIGxlbiwgYmVoYXZpb3IpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21hZHZpc2UoKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShiZWhhdmlvcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tYWR2aXNlKHJlcywgc3RhcnQsIGxlbiwgYmVoYXZpb3IpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tYWR2aXNlKHJlcywgKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYmVoYXZpb3IpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9taW5jb3JlKHN0YXJ0LCBsZW4sIHZlYykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21pbmNvcmUoKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIChsb25nKSh2ZWMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWluY29yZShyZXMsIHN0YXJ0LCBsZW4sIHZlYykgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWluY29yZShyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZlYykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Bpdm90X3Jvb3QobmV3X3Jvb3QsIHB1dF9vbGQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXZvdF9yb290KChsb25nKShuZXdfcm9vdCksIChsb25nKShwdXRfb2xkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Bpdm90X3Jvb3QocmVzLCBuZXdfcm9vdCwgcHV0X29sZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXZvdF9yb290KHJlcywgKGxvbmcpKG5ld19yb290KSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHB1dF9vbGQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jaHJvb3QoZmlsZW5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaHJvb3QoKGxvbmcpKGZpbGVuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nocm9vdChyZXMsIGZpbGVuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nocm9vdChyZXMsIChsb25nKShmaWxlbmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21rbm9kKGZpbGVuYW1lLCBtb2RlLCBkZXYpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWtub2QoKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKG1vZGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGRldikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ta25vZChyZXMsIGZpbGVuYW1lLCBtb2RlLCBkZXYpICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rbm9kKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKG1vZGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShkZXYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9saW5rKG9sZG5hbWUsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saW5rKChsb25nKShvbGRuYW1lKSwgKGxvbmcpKG5ld25hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGluayhyZXMsIG9sZG5hbWUsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGluayhyZXMsIChsb25nKShvbGRuYW1lKSwgKGxvbmcpKG5ld25hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeW1saW5rKG9sZCwgbmV3XykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bWxpbmsoKGxvbmcpKG9sZCksIChsb25nKShuZXdfKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5bWxpbmsocmVzLCBvbGQsIG5ld18pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3ltbGluayhyZXMsIChsb25nKShvbGQpLCAobG9uZykobmV3XykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VubGluayhwYXRobmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VubGluaygobG9uZykocGF0aG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdW5saW5rKHJlcywgcGF0aG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5saW5rKHJlcywgKGxvbmcpKHBhdGhuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVuYW1lKG9sZG5hbWUsIG5ld25hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW5hbWUoKGxvbmcpKG9sZG5hbWUpLCAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZW5hbWUocmVzLCBvbGRuYW1lLCBuZXduYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlbmFtZShyZXMsIChsb25nKShvbGRuYW1lKSwgKGxvbmcpKG5ld25hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jaG1vZChmaWxlbmFtZSwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NobW9kKChsb25nKShmaWxlbmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2NobW9kKHJlcywgZmlsZW5hbWUsIG1vZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2htb2QocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjaG1vZChmZCwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG1vZCgobG9uZykoZmQpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2htb2QocmVzLCBmZCwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2htb2QocmVzLCAobG9uZykoZmQpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjbnRsKGZkLCBjbWQsIGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjbnRsKChsb25nKShmZCksIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjbnRsKHJlcywgZmQsIGNtZCwgYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjbnRsKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY250bDY0KGZkLCBjbWQsIGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjbnRsNjQoKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCksIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNudGw2NChyZXMsIGZkLCBjbWQsIGFyZykgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNudGw2NChyZXMsIChsb25nKShmZCksIChsb25nKShjbWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BpcGUoZmlsZGVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGlwZSgobG9uZykoZmlsZGVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BpcGUocmVzLCBmaWxkZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGlwZShyZXMsIChsb25nKShmaWxkZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9waXBlMihmaWxkZXMsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGlwZTIoKGxvbmcpKGZpbGRlcyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9waXBlMihyZXMsIGZpbGRlcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGlwZTIocmVzLCAobG9uZykoZmlsZGVzKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZHVwKGZpbGRlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2R1cCgobG9uZykoZmlsZGVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2R1cChyZXMsIGZpbGRlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kdXAocmVzLCAobG9uZykoZmlsZGVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZHVwMihvbGRmZCwgbmV3ZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAyKChsb25nKShvbGRmZCksIChsb25nKShuZXdmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9kdXAyKHJlcywgb2xkZmQsIG5ld2ZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2R1cDIocmVzLCAobG9uZykob2xkZmQpLCAobG9uZykobmV3ZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9kdXAzKG9sZGZkLCBuZXdmZCwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9kdXAzKChsb25nKShvbGRmZCksIChsb25nKShuZXdmZCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9kdXAzKHJlcywgb2xkZmQsIG5ld2ZkLCBmbGFncykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2R1cDMocmVzLCAobG9uZykob2xkZmQpLCAobG9uZykobmV3ZmQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW9wZXJtKGZyb20sIG51bSwgb24pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb3Blcm0oKGxvbmcpKGZyb20pLCAobG9uZykobnVtKSwgKGxvbmcpKG9uKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvcGVybShyZXMsIGZyb20sIG51bSwgb24pICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb3Blcm0ocmVzLCAobG9uZykoZnJvbSksIChsb25nKShudW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob24pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb2N0bChmZCwgY21kLCBhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb2N0bCgobG9uZykoZmQpLCAobG9uZykoY21kKSwgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb2N0bChyZXMsIGZkLCBjbWQsIGFyZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb2N0bChyZXMsIChsb25nKShmZCksIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmxvY2soZmQsIGNtZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Zsb2NrKChsb25nKShmZCksIChsb25nKShjbWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmxvY2socmVzLCBmZCwgY21kKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Zsb2NrKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGNtZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvX3NldHVwKG5yX3JlcXMsIGN0eCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX3NldHVwKChsb25nKShucl9yZXFzKSwgKGxvbmcpKGN0eCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb19zZXR1cChyZXMsIG5yX3JlcXMsIGN0eCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19zZXR1cChyZXMsIChsb25nKShucl9yZXFzKSwgKGxvbmcpKGN0eCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvX2Rlc3Ryb3koY3R4KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fZGVzdHJveSgobG9uZykoY3R4KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvX2Rlc3Ryb3kocmVzLCBjdHgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fZGVzdHJveShyZXMsIChsb25nKShjdHgpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb19nZXRldmVudHMoY3R4X2lkLCBtaW5fbnIsIG5yLCBldmVudHMsICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fZ2V0ZXZlbnRzKChsb25nKShjdHhfaWQpLCAobG9uZykobWluX25yKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobnIpLCAobG9uZykoZXZlbnRzKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHRpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9fZ2V0ZXZlbnRzKHJlcywgY3R4X2lkLCBtaW5fbnIsIG5yLCBldmVudHMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX2dldGV2ZW50cyhyZXMsIChsb25nKShjdHhfaWQpLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1pbl9uciksIChsb25nKShuciksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShldmVudHMpLCAobG9uZykodGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvX3N1Ym1pdChjdHhfaWQsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19zdWJtaXQoKGxvbmcpKGN0eF9pZCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb19zdWJtaXQocmVzLCBjdHhfaWQsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fc3VibWl0KHJlcywgKGxvbmcpKGN0eF9pZCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb19jYW5jZWwoY3R4X2lkLCBpb2NiLCByZXN1bHQpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fY2FuY2VsKChsb25nKShjdHhfaWQpLCAobG9uZykoaW9jYiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHJlc3VsdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb19jYW5jZWwocmVzLCBjdHhfaWQsIGlvY2IsIHJlc3VsdCkgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fY2FuY2VsKHJlcywgKGxvbmcpKGN0eF9pZCksIChsb25nKShpb2NiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHJlc3VsdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbmRmaWxlKG91dF9mZCwgaW5fZmQsIG9mZnNldCwgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kZmlsZSgobG9uZykob3V0X2ZkKSwgKGxvbmcpKGluX2ZkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvZmZzZXQpLCAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VuZGZpbGUocmVzLCBvdXRfZmQsIGluX2ZkLCBvZmZzZXQsIGNvdW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmRmaWxlKHJlcywgKGxvbmcpKG91dF9mZCksIChsb25nKShpbl9mZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldCksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbmRmaWxlNjQob3V0X2ZkLCBpbl9mZCwgb2Zmc2V0LCBjb3VudCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRmaWxlNjQoKGxvbmcpKG91dF9mZCksIChsb25nKShpbl9mZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvZmZzZXQpLCAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VuZGZpbGU2NChyZXMsIG91dF9mZCwgaW5fZmQsIG9mZnNldCwgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZGZpbGU2NChyZXMsIChsb25nKShvdXRfZmQpLCAobG9uZykoaW5fZmQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9mZnNldCksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlYWRsaW5rKHBhdGgsIGJ1ZiwgYnVmc2l6KSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWRsaW5rKChsb25nKShwYXRoKSwgKGxvbmcpKGJ1ZiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmc2l6KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYWRsaW5rKHJlcywgcGF0aCwgYnVmLCBidWZzaXopICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlYWRsaW5rKHJlcywgKGxvbmcpKHBhdGgpLCAobG9uZykoYnVmKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVmc2l6KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY3JlYXQocGF0aG5hbWUsIG1vZGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jcmVhdCgobG9uZykocGF0aG5hbWUpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jcmVhdChyZXMsIHBhdGhuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2NyZWF0KHJlcywgKGxvbmcpKHBhdGhuYW1lKSwgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vcGVuKGZpbGVuYW1lLCBmbGFncywgbW9kZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29wZW4oKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKGZsYWdzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb3BlbihyZXMsIGZpbGVuYW1lLCBmbGFncywgbW9kZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vcGVuKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKGZsYWdzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvc2UoZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9zZSgobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2xvc2UocmVzLCBmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9zZShyZXMsIChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2FjY2VzcyhmaWxlbmFtZSwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY2VzcygobG9uZykoZmlsZW5hbWUpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hY2Nlc3MocmVzLCBmaWxlbmFtZSwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2Nlc3MocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ZoYW5ndXAoKSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ZoYW5ndXAoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfdmhhbmd1cChyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdmhhbmd1cChyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nob3duKGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2hvd24oKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHVzZXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nob3duKHJlcywgZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hvd24ocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykodXNlciksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGNob3duKGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGNob3duKChsb25nKShmaWxlbmFtZSksIChsb25nKSh1c2VyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGNob3duKHJlcywgZmlsZW5hbWUsIHVzZXIsIGdyb3VwKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGNob3duKHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpKHVzZXIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY2hvd24oZmQsIHVzZXIsIGdyb3VwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNob3duKChsb25nKShmZCksIChsb25nKSh1c2VyKSwgKGxvbmcpKGdyb3VwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaG93bihyZXMsIGZkLCB1c2VyLCBncm91cCkgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjaG93bihyZXMsIChsb25nKShmZCksIChsb25nKSh1c2VyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGdyb3VwKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2hvd24xNihmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG93bjE2KChsb25nKShmaWxlbmFtZSksIChsb25nKXVzZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWdyb3VwKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2hvd24xNihyZXMsIGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG93bjE2KHJlcywgKGxvbmcpKGZpbGVuYW1lKSwgKGxvbmcpdXNlciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWdyb3VwKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9sY2hvd24xNihmaWxlbmFtZSwgdXNlciwgZ3JvdXApICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sY2hvd24xNigobG9uZykoZmlsZW5hbWUpLCAobG9uZyl1c2VyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sY2hvd24xNihyZXMsIGZpbGVuYW1lLCB1c2VyLCBncm91cCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sY2hvd24xNihyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKXVzZXIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZ3JvdXApCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjaG93bjE2KGZkLCB1c2VyLCBncm91cCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bjE2KChsb25nKShmZCksIChsb25nKXVzZXIsIChsb25nKWdyb3VwKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNob3duMTYocmVzLCBmZCwgdXNlciwgZ3JvdXApICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duMTYocmVzLCAobG9uZykoZmQpLCAobG9uZyl1c2VyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWdyb3VwKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZWdpZDE2KHJnaWQsIGVnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZWdpZDE2KChsb25nKXJnaWQsIChsb25nKWVnaWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZWdpZDE2KHJlcywgcmdpZCwgZWdpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZWdpZDE2KHJlcywgKGxvbmcpcmdpZCwgKGxvbmcpZWdpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0Z2lkMTYoZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z2lkMTYoKGxvbmcpZ2lkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0Z2lkMTYocmVzLCBnaWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0Z2lkMTYocmVzLCAobG9uZylnaWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJldWlkMTYocnVpZCwgZXVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJldWlkMTYoKGxvbmcpcnVpZCwgKGxvbmcpZXVpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJldWlkMTYocmVzLCBydWlkLCBldWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJldWlkMTYocmVzLCAobG9uZylydWlkLCAobG9uZylldWlkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXR1aWQxNih1aWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR1aWQxNigobG9uZyl1aWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXR1aWQxNihyZXMsIHVpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR1aWQxNihyZXMsIChsb25nKXVpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVzdWlkMTYocnVpZCwgZXVpZCwgc3VpZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc3VpZDE2KChsb25nKXJ1aWQsIChsb25nKWV1aWQsIChsb25nKXN1aWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXN1aWQxNihyZXMsIHJ1aWQsIGV1aWQsIHN1aWQpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXN1aWQxNihyZXMsIChsb25nKXJ1aWQsIChsb25nKWV1aWQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpc3VpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzdWlkMTYocnVpZCwgZXVpZCwgc3VpZCkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc3VpZDE2KChsb25nKShydWlkKSwgKGxvbmcpKGV1aWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmVzdWlkMTYocmVzLCBydWlkLCBldWlkLCBzdWlkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc3VpZDE2KHJlcywgKGxvbmcpKHJ1aWQpLCAobG9uZykoZXVpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHN1aWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXNnaWQxNihyZ2lkLCBlZ2lkLCBzZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzZ2lkMTYoKGxvbmcpcmdpZCwgKGxvbmcpZWdpZCwgKGxvbmcpc2dpZCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJlc2dpZDE2KHJlcywgcmdpZCwgZWdpZCwgc2dpZCkgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc2dpZDE2KHJlcywgKGxvbmcpcmdpZCwgKGxvbmcpZWdpZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylzZ2lkKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRyZXNnaWQxNihyZ2lkLCBlZ2lkLCBzZ2lkKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzZ2lkMTYoKGxvbmcpKHJnaWQpLCAobG9uZykoZWdpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXNnaWQxNihyZXMsIHJnaWQsIGVnaWQsIHNnaWQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cmVzZ2lkMTYocmVzLCAobG9uZykocmdpZCksIChsb25nKShlZ2lkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2dpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzdWlkMTYodWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnN1aWQxNigobG9uZyl1aWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRmc3VpZDE2KHJlcywgdWlkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzdWlkMTYocmVzLCAobG9uZyl1aWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzZ2lkMTYoZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnNnaWQxNigobG9uZylnaWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRmc2dpZDE2KHJlcywgZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGZzZ2lkMTYocmVzLCAobG9uZylnaWQpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdyb3VwczE2KGdpZHNldHNpemUsIGdyb3VwbGlzdCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdyb3VwczE2KChsb25nKShnaWRzZXRzaXplKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXBsaXN0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGdyb3VwczE2KHJlcywgZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdyb3VwczE2KHJlcywgKGxvbmcpKGdpZHNldHNpemUpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZ3JvdXBsaXN0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0Z3JvdXBzMTYoZ2lkc2V0c2l6ZSwgZ3JvdXBsaXN0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0Z3JvdXBzMTYoKGxvbmcpKGdpZHNldHNpemUpLCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0Z3JvdXBzMTYocmVzLCBnaWRzZXRzaXplLCBncm91cGxpc3QpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0Z3JvdXBzMTYocmVzLCAobG9uZykoZ2lkc2V0c2l6ZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShncm91cGxpc3QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXR1aWQxNigpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR1aWQxNigpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXR1aWQxNihyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dWlkMTYocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRldWlkMTYoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZXVpZDE2KCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGV1aWQxNihyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZXVpZDE2KHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Z2lkMTYoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z2lkMTYoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z2lkMTYocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdpZDE2KHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0ZWdpZDE2KCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGVnaWQxNigpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRlZ2lkMTYocmVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGVnaWQxNihyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3V0aW1lKGZpbGVuYW1lLCB0aW1lcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3V0aW1lKChsb25nKShmaWxlbmFtZSksIChsb25nKSh0aW1lcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91dGltZShyZXMsIGZpbGVuYW1lLCB0aW1lcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZShyZXMsIChsb25nKShmaWxlbmFtZSksIChsb25nKSh0aW1lcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3V0aW1lcyhmaWxlbmFtZSwgdXRpbWVzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWVzKChsb25nKShmaWxlbmFtZSksIChsb25nKSh1dGltZXMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdXRpbWVzKHJlcywgZmlsZW5hbWUsIHV0aW1lcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZXMocmVzLCAobG9uZykoZmlsZW5hbWUpLCAobG9uZykodXRpbWVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbHNlZWsoZmQsIG9mZnNldCwgb3JpZ2luKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHNlZWsoKGxvbmcpKGZkKSwgKGxvbmcpKG9mZnNldCksIChsb25nKShvcmlnaW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbHNlZWsocmVzLCBmZCwgb2Zmc2V0LCBvcmlnaW4pICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xzZWVrKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG9mZnNldCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9yaWdpbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xsc2VlayhmZCwgb2Zmc2V0X2hpZ2gsIG9mZnNldF9sb3csIHJlc3VsdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sbHNlZWsoKGxvbmcpKGZkKSwgKGxvbmcpKG9mZnNldF9oaWdoKSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvZmZzZXRfbG93KSwgKGxvbmcpKHJlc3VsdCksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3JpZ2luKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2xsc2VlayhyZXMsIGZkLCBvZmZzZXRfaGlnaCwgb2Zmc2V0X2xvdywgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgb3JpZ2luKSAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xsc2VlayhyZXMsIChsb25nKShmZCksIChsb25nKShvZmZzZXRfaGlnaCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvZmZzZXRfbG93KSwgKGxvbmcpKHJlc3VsdCksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9yaWdpbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlYWQoZmQsIGJ1ZiwgY291bnQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkKChsb25nKShmZCksIChsb25nKShidWYpLCAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVhZChyZXMsIGZkLCBidWYsIGNvdW50KSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZChyZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVhZHYoZmQsIHZlYywgdmxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWR2KChsb25nKShmZCksIChsb25nKSh2ZWMpLCAobG9uZykodmxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWFkdihyZXMsIGZkLCB2ZWMsIHZsZW4pICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZHYocmVzLCAobG9uZykoZmQpLCAobG9uZykodmVjKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodmxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3dyaXRlKGZkLCBidWYsIGNvdW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd3JpdGUoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF93cml0ZShyZXMsIGZkLCBidWYsIGNvdW50KSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd3JpdGUocmVzLCAobG9uZykoZmQpLCAobG9uZykoYnVmKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV93cml0ZXYoZmQsIHZlYywgdmxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dyaXRldigobG9uZykoZmQpLCAobG9uZykodmVjKSwgKGxvbmcpKHZsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfd3JpdGV2KHJlcywgZmQsIHZlYywgdmxlbikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93cml0ZXYocmVzLCAobG9uZykoZmQpLCAobG9uZykodmVjKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pKQorCisjaWZkZWYgX0xQNjQKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJlYWQ2NChmZCwgYnVmLCBjb3VudCwgcG9zKSAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJlYWQ2NCgobG9uZykoZmQpLCAobG9uZykoYnVmKSwgKGxvbmcpKGNvdW50KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcmVhZDY0KHJlcywgZmQsIGJ1ZiwgY291bnQsIHBvcykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcmVhZDY0KHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpLCAobG9uZykocG9zKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHdyaXRlNjQoZmQsIGJ1ZiwgY291bnQsIHBvcykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZTY0KChsb25nKShmZCksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSwgKGxvbmcpKHBvcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wd3JpdGU2NChyZXMsIGZkLCBidWYsIGNvdW50LCBwb3MpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRlNjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoYnVmKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpLCAobG9uZykocG9zKSkKKyNlbHNlCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ByZWFkNjQoZmQsIGJ1ZiwgY291bnQsIHBvczAsIHBvczEpICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ByZWFkNjQoKGxvbmcpKGZkKSwgKGxvbmcpKGJ1ZiksIChsb25nKShjb3VudCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3MwKSwgKGxvbmcpKHBvczEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJlYWQ2NChyZXMsIGZkLCBidWYsIGNvdW50LCBwb3MwLCBwb3MxKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkNjQocmVzLCAobG9uZykoZmQpLCAobG9uZykoYnVmKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpLCAobG9uZykocG9zMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zMSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3B3cml0ZTY0KGZkLCBidWYsIGNvdW50LCBwb3MwLCBwb3MxKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHdyaXRlNjQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykoZmQpLCAobG9uZykoYnVmKSwgKGxvbmcpKGNvdW50KSwgKGxvbmcpKHBvczApLCAobG9uZykocG9zMSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wd3JpdGU2NChyZXMsIGZkLCBidWYsIGNvdW50LCBwb3MwLCBwb3MxKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B3cml0ZTY0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShmZCksIChsb25nKShidWYpLCAobG9uZykoY291bnQpLCAobG9uZykocG9zMCksIChsb25nKShwb3MxKSkKKyNlbmRpZgorCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ByZWFkdihmZCwgdmVjLCB2bGVuLCBwb3NfbCwgcG9zX2gpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmVhZHYoKGxvbmcpKGZkKSwgKGxvbmcpKHZlYyksIChsb25nKSh2bGVuKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocG9zX2wpLCAobG9uZykocG9zX2gpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJlYWR2KHJlcywgZmQsIHZlYywgdmxlbiwgcG9zX2wsIHBvc19oKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ByZWFkdihyZXMsIChsb25nKShmZCksIChsb25nKSh2ZWMpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2bGVuKSwgKGxvbmcpKHBvc19sKSwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvc19oKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHdyaXRldihmZCwgdmVjLCB2bGVuLCBwb3NfbCwgcG9zX2gpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wd3JpdGV2KChsb25nKShmZCksIChsb25nKSh2ZWMpLCAobG9uZykodmxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwb3NfbCksIChsb25nKShwb3NfaCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wd3JpdGV2KHJlcywgZmQsIHZlYywgdmxlbiwgcG9zX2wsIHBvc19oKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B3cml0ZXYocmVzLCAobG9uZykoZmQpLCAobG9uZykodmVjKSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHZsZW4pLCAobG9uZykocG9zX2wpLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBvc19oKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Y3dkKGJ1Ziwgc2l6ZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGN3ZCgobG9uZykoYnVmKSwgKGxvbmcpKHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Y3dkKHJlcywgYnVmLCBzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGN3ZChyZXMsIChsb25nKShidWYpLCAobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21rZGlyKHBhdGhuYW1lLCBtb2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWtkaXIoKGxvbmcpKHBhdGhuYW1lKSwgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWtkaXIocmVzLCBwYXRobmFtZSwgbW9kZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ta2RpcihyZXMsIChsb25nKShwYXRobmFtZSksIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2hkaXIoZmlsZW5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaGRpcigobG9uZykoZmlsZW5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfY2hkaXIocmVzLCBmaWxlbmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaGRpcihyZXMsIChsb25nKShmaWxlbmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjaGRpcihmZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaGRpcigobG9uZykoZmQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNoZGlyKHJlcywgZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNoZGlyKHJlcywgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcm1kaXIocGF0aG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ybWRpcigobG9uZykocGF0aG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfcm1kaXIocmVzLCBwYXRobmFtZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ybWRpcihyZXMsIChsb25nKShwYXRobmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xvb2t1cF9kY29va2llKGNvb2tpZTY0LCBidWYsIGxlbikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sb29rdXBfZGNvb2tpZSgobG9uZykoY29va2llNjQpLCAobG9uZykoYnVmKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbG9va3VwX2Rjb29raWUocmVzLCBjb29raWU2NCwgYnVmLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbG9va3VwX2Rjb29raWUocmVzLCAobG9uZykoY29va2llNjQpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWYpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgYWRkcikgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcXVvdGFjdGwoKGxvbmcpKGNtZCksIChsb25nKShzcGVjaWFsKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpZCksIChsb25nKShhZGRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3F1b3RhY3RsKHJlcywgY21kLCBzcGVjaWFsLCBpZCwgYWRkcikgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3F1b3RhY3RsKHJlcywgKGxvbmcpKGNtZCksIChsb25nKShzcGVjaWFsKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoaWQpLCAobG9uZykoYWRkcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGRlbnRzKGZkLCBkaXJlbnQsIGNvdW50KSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRkZW50cygobG9uZykoZmQpLCAobG9uZykoZGlyZW50KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjb3VudCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRkZW50cyhyZXMsIGZkLCBkaXJlbnQsIGNvdW50KSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZGVudHMocmVzLCAobG9uZykoZmQpLCAobG9uZykoZGlyZW50KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRkZW50czY0KGZkLCBkaXJlbnQsIGNvdW50KSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRkZW50czY0KChsb25nKShmZCksIChsb25nKShkaXJlbnQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZGVudHM2NChyZXMsIGZkLCBkaXJlbnQsIGNvdW50KSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZGVudHM2NChyZXMsIChsb25nKShmZCksIChsb25nKShkaXJlbnQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNvdW50KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0c29ja29wdChmZCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0c29ja29wdCgobG9uZykoZmQpLCAobG9uZykobGV2ZWwpLCAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdG5hbWUpLCAobG9uZykob3B0dmFsKSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0c29ja29wdChyZXMsIGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0c29ja29wdChyZXMsIChsb25nKShmZCksIChsb25nKShsZXZlbCksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRuYW1lKSwgKGxvbmcpKG9wdHZhbCksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG9wdGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHNvY2tvcHQoZmQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHNvY2tvcHQoKGxvbmcpKGZkKSwgKGxvbmcpKGxldmVsKSwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRuYW1lKSwgKGxvbmcpKG9wdHZhbCksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHNvY2tvcHQocmVzLCBmZCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRsZW4pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNvY2tvcHQocmVzLCAobG9uZykoZmQpLCAobG9uZykobGV2ZWwpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob3B0bmFtZSksIChsb25nKShvcHR2YWwpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShvcHRsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9iaW5kKGFyZzAsIGFyZzEsIGFyZzIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9iaW5kKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9iaW5kKHJlcywgYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9iaW5kKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Nvbm5lY3QoYXJnMCwgYXJnMSwgYXJnMikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nvbm5lY3QoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nvbm5lY3QocmVzLCBhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nvbm5lY3QocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWNjZXB0KGFyZzAsIGFyZzEsIGFyZzIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2NlcHQoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FjY2VwdChyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjZXB0KHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWNjZXB0NChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXB0NCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hY2NlcHQ0KHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2NlcHQ0KHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0c29ja25hbWUoYXJnMCwgYXJnMSwgYXJnMikgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHNvY2tuYW1lKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0c29ja25hbWUocmVzLCBhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNvY2tuYW1lKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwZWVybmFtZShhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGVlcm5hbWUoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRwZWVybmFtZShyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cGVlcm5hbWUocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbmQoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZCgobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgKGxvbmcpKGFyZzIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW5kKHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZHRvKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kdG8oKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW5kdG8ocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmR0byhyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNCksIChsb25nKShhcmc1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VuZG1zZyhmZCwgbXNnLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmRtc2coKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW5kbXNnKHJlcywgZmQsIG1zZywgZmxhZ3MpICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kbXNnKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW5kbW1zZyhmZCwgbXNnLCB2bGVuLCBmbGFncykgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kbW1zZygobG9uZykoZmQpLCAobG9uZykobXNnKSwgKGxvbmcpKHZsZW4pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbmRtbXNnKHJlcywgZmQsIG1zZywgdmxlbiwgZmxhZ3MpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kbW1zZyhyZXMsIChsb25nKShmZCksIChsb25nKShtc2cpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2bGVuKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcmVjdihhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2KChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlY3YocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3YocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWN2ZnJvbShhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdmZyb20oKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSwgKGxvbmcpKGFyZzUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVjdmZyb20ocmVzLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmc1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdmZyb20ocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmc0KSwgKGxvbmcpKGFyZzUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWN2bXNnKGZkLCBtc2csIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdm1zZygobG9uZykoZmQpLCAobG9uZykobXNnKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlY3Ztc2cocmVzLCBmZCwgbXNnLCBmbGFncykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3Ztc2cocmVzLCAobG9uZykoZmQpLCAobG9uZykobXNnKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlY3ZtbXNnKGZkLCBtc2csIHZsZW4sIGZsYWdzLCB0aW1lb3V0KSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3ZtbXNnKChsb25nKShmZCksIChsb25nKShtc2cpLCAobG9uZykodmxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpLCAobG9uZykodGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZWN2bW1zZyhyZXMsIGZkLCBtc2csIHZsZW4sIGZsYWdzLCB0aW1lb3V0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3ZtbXNnKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKG1zZyksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh2bGVuKSwgKGxvbmcpKGZsYWdzKSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc29ja2V0KGFyZzAsIGFyZzEsIGFyZzIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zb2NrZXQoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NvY2tldChyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc29ja2V0KHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc29ja2V0cGFpcihhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc29ja2V0cGFpcigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zb2NrZXRwYWlyKHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXRwYWlyKHJlcywgKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMiksIChsb25nKShhcmczKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc29ja2V0Y2FsbChjYWxsLCBhcmdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc29ja2V0Y2FsbCgobG9uZykoY2FsbCksIChsb25nKShhcmdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NvY2tldGNhbGwocmVzLCBjYWxsLCBhcmdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NvY2tldGNhbGwocmVzLCAobG9uZykoY2FsbCksIChsb25nKShhcmdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGlzdGVuKGFyZzAsIGFyZzEpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saXN0ZW4oKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9saXN0ZW4ocmVzLCBhcmcwLCBhcmcxKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpc3RlbihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wb2xsKHVmZHMsIG5mZHMsIHRpbWVvdXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wb2xsKChsb25nKSh1ZmRzKSwgKGxvbmcpKG5mZHMpLCAobG9uZykodGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wb2xsKHJlcywgdWZkcywgbmZkcywgdGltZW91dCkgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wb2xsKHJlcywgKGxvbmcpKHVmZHMpLCAobG9uZykobmZkcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbGVjdChuLCBpbnAsIG91dHAsIGV4cCwgdHZwKSAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbGVjdCgobG9uZykobiksIChsb25nKShpbnApLCAobG9uZykob3V0cCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGV4cCksIChsb25nKSh0dnApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VsZWN0KHJlcywgbiwgaW5wLCBvdXRwLCBleHAsIHR2cCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZWxlY3QocmVzLCAobG9uZykobiksIChsb25nKShpbnApLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG91dHApLCAobG9uZykoZXhwKSwgKGxvbmcpKHR2cCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZF9zZWxlY3QoYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX3NlbGVjdCgobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZF9zZWxlY3QocmVzLCBhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX3NlbGVjdChyZXMsIChsb25nKShhcmcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF9jcmVhdGUoc2l6ZSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2NyZWF0ZSgobG9uZykoc2l6ZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9lcG9sbF9jcmVhdGUocmVzLCBzaXplKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX2NyZWF0ZShyZXMsIChsb25nKShzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXBvbGxfY3JlYXRlMShmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2NyZWF0ZTEoKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Vwb2xsX2NyZWF0ZTEocmVzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9jcmVhdGUxKHJlcywgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXBvbGxfY3RsKGVwZmQsIG9wLCBmZCwgZXZlbnQpICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfY3RsKChsb25nKShlcGZkKSwgKGxvbmcpKG9wKSwgKGxvbmcpKGZkKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZXZlbnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfY3RsKHJlcywgZXBmZCwgb3AsIGZkLCBldmVudCkgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfY3RsKHJlcywgKGxvbmcpKGVwZmQpLCAobG9uZykob3ApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmQpLCAobG9uZykoZXZlbnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9lcG9sbF93YWl0KGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0aW1lb3V0KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfd2FpdCgobG9uZykoZXBmZCksIChsb25nKShldmVudHMpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtYXhldmVudHMpLCAobG9uZykodGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9lcG9sbF93YWl0KHJlcywgZXBmZCwgZXZlbnRzLCBtYXhldmVudHMsICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX3dhaXQocmVzLCAobG9uZykoZXBmZCksIChsb25nKShldmVudHMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1heGV2ZW50cyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXBvbGxfcHdhaXQoZXBmZCwgZXZlbnRzLCBtYXhldmVudHMsIHRpbWVvdXQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbWFzaywgc2lnc2V0c2l6ZSkgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9lcG9sbF9wd2FpdCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShlcGZkKSwgKGxvbmcpKGV2ZW50cyksIChsb25nKShtYXhldmVudHMpLCAobG9uZykodGltZW91dCksICAgICAgIFwKKyAgICAgIChsb25nKShzaWdtYXNrKSwgKGxvbmcpKHNpZ3NldHNpemUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfcHdhaXQocmVzLCBlcGZkLCBldmVudHMsIG1heGV2ZW50cywgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCBzaWdtYXNrLCBzaWdzZXRzaXplKSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfcHdhaXQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoZXBmZCksIChsb25nKShldmVudHMpLCAobG9uZykobWF4ZXZlbnRzKSwgKGxvbmcpKHRpbWVvdXQpLCBcCisgICAgICAobG9uZykoc2lnbWFzayksIChsb25nKShzaWdzZXRzaXplKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0aG9zdG5hbWUobmFtZSwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0aG9zdG5hbWUoKGxvbmcpKG5hbWUpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldGhvc3RuYW1lKHJlcywgbmFtZSwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGhvc3RuYW1lKHJlcywgKGxvbmcpKG5hbWUpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0aG9zdG5hbWUobmFtZSwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0aG9zdG5hbWUoKGxvbmcpKG5hbWUpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGhvc3RuYW1lKHJlcywgbmFtZSwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGhvc3RuYW1lKHJlcywgKGxvbmcpKG5hbWUpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZG9tYWlubmFtZShuYW1lLCBsZW4pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRkb21haW5uYW1lKChsb25nKShuYW1lKSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRkb21haW5uYW1lKHJlcywgbmFtZSwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGRvbWFpbm5hbWUocmVzLCAobG9uZykobmFtZSksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uZXd1bmFtZShuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3dW5hbWUoKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbmV3dW5hbWUocmVzLCBuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld3VuYW1lKHJlcywgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV91bmFtZShhcmcwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5hbWUoKGxvbmcpKGFyZzApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdW5hbWUocmVzLCBhcmcwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VuYW1lKHJlcywgKGxvbmcpKGFyZzApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGR1bmFtZShhcmcwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkdW5hbWUoKGxvbmcpKGFyZzApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkdW5hbWUocmVzLCBhcmcwKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZHVuYW1lKHJlcywgKGxvbmcpKGFyZzApKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRybGltaXQocmVzb3VyY2UsIHJsaW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRybGltaXQoKGxvbmcpKHJlc291cmNlKSwgKGxvbmcpKHJsaW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cmxpbWl0KHJlcywgcmVzb3VyY2UsIHJsaW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cmxpbWl0KHJlcywgKGxvbmcpKHJlc291cmNlKSwgKGxvbmcpKHJsaW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGRfZ2V0cmxpbWl0KHJlc291cmNlLCBybGltKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX2dldHJsaW1pdCgobG9uZykocmVzb3VyY2UpLCAobG9uZykocmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRfZ2V0cmxpbWl0KHJlcywgcmVzb3VyY2UsIHJsaW0pICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9nZXRybGltaXQocmVzLCAobG9uZykocmVzb3VyY2UpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHJsaW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRybGltaXQocmVzb3VyY2UsIHJsaW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRybGltaXQoKGxvbmcpKHJlc291cmNlKSwgKGxvbmcpKHJsaW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmxpbWl0KHJlcywgcmVzb3VyY2UsIHJsaW0pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmxpbWl0KHJlcywgKGxvbmcpKHJlc291cmNlKSwgKGxvbmcpKHJsaW0pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wcmxpbWl0NjQocGlkLCByZXNvdXJjZSwgbmV3X3JsaW0sIG9sZF9ybGltKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJsaW1pdDY0KChsb25nKShwaWQpLCAobG9uZykocmVzb3VyY2UpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld19ybGltKSwgKGxvbmcpKG9sZF9ybGltKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BybGltaXQ2NChyZXMsIHBpZCwgcmVzb3VyY2UsIG5ld19ybGltLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfcmxpbSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJsaW1pdDY0KHJlcywgKGxvbmcpKHBpZCksIChsb25nKShyZXNvdXJjZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdfcmxpbSksIChsb25nKShvbGRfcmxpbSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHJ1c2FnZSh3aG8sIHJ1KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cnVzYWdlKChsb25nKSh3aG8pLCAobG9uZykocnUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0cnVzYWdlKHJlcywgd2hvLCBydSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRydXNhZ2UocmVzLCAobG9uZykod2hvKSwgKGxvbmcpKHJ1KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdW1hc2sobWFzaykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VtYXNrKChsb25nKShtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3VtYXNrKHJlcywgbWFzaykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bWFzayhyZXMsIChsb25nKShtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXNnZ2V0KGtleSwgbXNnZmxnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNnZ2V0KChsb25nKShrZXkpLCAobG9uZykobXNnZmxnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21zZ2dldChyZXMsIGtleSwgbXNnZmxnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zZ2dldChyZXMsIChsb25nKShrZXkpLCAobG9uZykobXNnZmxnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXNnc25kKG1zcWlkLCBtc2dwLCBtc2dzeiwgbXNnZmxnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNnc25kKChsb25nKShtc3FpZCksIChsb25nKShtc2dwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnc3opLCAobG9uZykobXNnZmxnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21zZ3NuZChyZXMsIG1zcWlkLCBtc2dwLCBtc2dzeiwgbXNnZmxnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zZ3NuZChyZXMsIChsb25nKShtc3FpZCksIChsb25nKShtc2dwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ3N6KSwgKGxvbmcpKG1zZ2ZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21zZ3Jjdihtc3FpZCwgbXNncCwgbXNnc3osIG1zZ3R5cCwgbXNnZmxnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNncmN2KChsb25nKShtc3FpZCksIChsb25nKShtc2dwKSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dzeiksIChsb25nKShtc2d0eXApLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dmbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXNncmN2KHJlcywgbXNxaWQsIG1zZ3AsIG1zZ3N6LCBtc2d0eXAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dmbGcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zZ3JjdihyZXMsIChsb25nKShtc3FpZCksIChsb25nKShtc2dwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1zZ3N6KSwgKGxvbmcpKG1zZ3R5cCksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtc2dmbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tc2djdGwobXNxaWQsIGNtZCwgYnVmKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNnY3RsKChsb25nKShtc3FpZCksIChsb25nKShjbWQpLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21zZ2N0bChyZXMsIG1zcWlkLCBjbWQsIGJ1ZikgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXNnY3RsKHJlcywgKGxvbmcpKG1zcWlkKSwgKGxvbmcpKGNtZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW1nZXQoa2V5LCBuc2Vtcywgc2VtZmxnKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbWdldCgobG9uZykoa2V5KSwgKGxvbmcpKG5zZW1zKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2VtZmxnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbWdldChyZXMsIGtleSwgbnNlbXMsIHNlbWZsZykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VtZ2V0KHJlcywgKGxvbmcpKGtleSksIChsb25nKShuc2VtcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzZW1mbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZW1vcChzZW1pZCwgc29wcywgbnNvcHMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW1vcCgobG9uZykoc2VtaWQpLCAobG9uZykoc29wcyksIChsb25nKShuc29wcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZW1vcChyZXMsIHNlbWlkLCBzb3BzLCBuc29wcykgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbW9wKHJlcywgKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNvcHMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuc29wcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlbWN0bChzZW1pZCwgc2VtbnVtLCBjbWQsIGFyZykgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtY3RsKChsb25nKShzZW1pZCksIChsb25nKShzZW1udW0pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbWN0bChyZXMsIHNlbWlkLCBzZW1udW0sIGNtZCwgYXJnKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VtY3RsKHJlcywgKGxvbmcpKHNlbWlkKSwgKGxvbmcpKHNlbW51bSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjbWQpLCAobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2VtdGltZWRvcChzZW1pZCwgc29wcywgbnNvcHMsIHRpbWVvdXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW10aW1lZG9wKChsb25nKShzZW1pZCksIChsb25nKShzb3BzKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuc29wcyksIChsb25nKSh0aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NlbXRpbWVkb3AocmVzLCBzZW1pZCwgc29wcywgbnNvcHMsIHRpbWVvdXQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VtdGltZWRvcChyZXMsIChsb25nKShzZW1pZCksIChsb25nKShzb3BzKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobnNvcHMpLCAobG9uZykodGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NobWF0KHNobWlkLCBzaG1hZGRyLCBzaG1mbGcpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2htYXQoKGxvbmcpKHNobWlkKSwgKGxvbmcpKHNobWFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNobWZsZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaG1hdChyZXMsIHNobWlkLCBzaG1hZGRyLCBzaG1mbGcpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWF0KHJlcywgKGxvbmcpKHNobWlkKSwgKGxvbmcpKHNobWFkZHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzaG1mbGcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaG1nZXQoa2V5LCBzaXplLCBmbGFnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2htZ2V0KChsb25nKShrZXkpLCAobG9uZykoc2l6ZSksIChsb25nKShmbGFnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NobWdldChyZXMsIGtleSwgc2l6ZSwgZmxhZykgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1nZXQocmVzLCAobG9uZykoa2V5KSwgKGxvbmcpKHNpemUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NobWR0KHNobWFkZHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1kdCgobG9uZykoc2htYWRkcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zaG1kdChyZXMsIHNobWFkZHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htZHQocmVzLCAobG9uZykoc2htYWRkcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NobWN0bChzaG1pZCwgY21kLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaG1jdGwoKGxvbmcpKHNobWlkKSwgKGxvbmcpKGNtZCksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2htY3RsKHJlcywgc2htaWQsIGNtZCwgYnVmKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1jdGwocmVzLCAobG9uZykoc2htaWQpLCAobG9uZykoY21kKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lwYyhjYWxsLCBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgcHRyLCBmaWZ0aCkgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lwYygobG9uZykoY2FsbCksIChsb25nKShmaXJzdCksICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNlY29uZCksIChsb25nKSh0aGlyZCksIChsb25nKShwdHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmaWZ0aCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pcGMocmVzLCBjYWxsLCBmaXJzdCwgc2Vjb25kLCB0aGlyZCwgcHRyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlmdGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lwYyhyZXMsIChsb25nKShjYWxsKSwgKGxvbmcpKGZpcnN0KSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2Vjb25kKSwgKGxvbmcpKHRoaXJkKSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykocHRyKSwgKGxvbmcpKGZpZnRoKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbXFfb3BlbihuYW1lLCBvZmxhZywgbW9kZSwgYXR0cikgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX29wZW4oKGxvbmcpKG5hbWUpLCAobG9uZykob2ZsYWcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShhdHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21xX29wZW4ocmVzLCBuYW1lLCBvZmxhZywgbW9kZSwgYXR0cikgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV9vcGVuKHJlcywgKGxvbmcpKG5hbWUpLCAobG9uZykob2ZsYWcpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykoYXR0cikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX3VubGluayhuYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfdW5saW5rKChsb25nKShuYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21xX3VubGluayhyZXMsIG5hbWUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfdW5saW5rKHJlcywgKGxvbmcpKG5hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcV90aW1lZHNlbmQobXFkZXMsIG1zZ19wdHIsIG1zZ19sZW4sICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19wcmlvLCBhYnNfdGltZW91dCkgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXFfdGltZWRzZW5kKChsb25nKShtcWRlcyksIChsb25nKShtc2dfcHRyKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXNnX2xlbiksIChsb25nKShtc2dfcHJpbyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFic190aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21xX3RpbWVkc2VuZChyZXMsIG1xZGVzLCBtc2dfcHRyLCBtc2dfbGVuLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfcHJpbywgYWJzX3RpbWVvdXQpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfdGltZWRzZW5kKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKG1xZGVzKSwgKGxvbmcpKG1zZ19wdHIpLCAobG9uZykobXNnX2xlbiksIChsb25nKShtc2dfcHJpbyksIFwKKyAgICAgIChsb25nKShhYnNfdGltZW91dCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21xX3RpbWVkcmVjZWl2ZShtcWRlcywgbXNnX3B0ciwgbXNnX2xlbiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX3ByaW8sIGFic190aW1lb3V0KSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV90aW1lZHJlY2VpdmUoICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykobXFkZXMpLCAobG9uZykobXNnX3B0ciksIChsb25nKShtc2dfbGVuKSwgKGxvbmcpKG1zZ19wcmlvKSwgXAorICAgICAgKGxvbmcpKGFic190aW1lb3V0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21xX3RpbWVkcmVjZWl2ZShyZXMsIG1xZGVzLCBtc2dfcHRyLCBtc2dfbGVuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX3ByaW8sIGFic190aW1lb3V0KSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV90aW1lZHJlY2VpdmUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKG1xZGVzKSwgKGxvbmcpKG1zZ19wdHIpLCAobG9uZykobXNnX2xlbiksIChsb25nKShtc2dfcHJpbyksICBcCisgICAgICAobG9uZykoYWJzX3RpbWVvdXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcV9ub3RpZnkobXFkZXMsIG5vdGlmaWNhdGlvbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX25vdGlmeSgobG9uZykobXFkZXMpLCAobG9uZykobm90aWZpY2F0aW9uKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21xX25vdGlmeShyZXMsIG1xZGVzLCBub3RpZmljYXRpb24pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfbm90aWZ5KHJlcywgKGxvbmcpKG1xZGVzKSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShub3RpZmljYXRpb24pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tcV9nZXRzZXRhdHRyKG1xZGVzLCBtcXN0YXQsIG9tcXN0YXQpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV9nZXRzZXRhdHRyKChsb25nKShtcWRlcyksIChsb25nKShtcXN0YXQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykob21xc3RhdCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tcV9nZXRzZXRhdHRyKHJlcywgbXFkZXMsIG1xc3RhdCwgb21xc3RhdCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tcV9nZXRzZXRhdHRyKHJlcywgKGxvbmcpKG1xZGVzKSwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobXFzdGF0KSwgKGxvbmcpKG9tcXN0YXQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wY2ljb25maWdfaW9iYXNlKHdoaWNoLCBidXMsIGRldmZuKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wY2ljb25maWdfaW9iYXNlKChsb25nKSh3aGljaCksIChsb25nKShidXMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZGV2Zm4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGNpY29uZmlnX2lvYmFzZShyZXMsIHdoaWNoLCBidXMsIGRldmZuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ19pb2Jhc2UocmVzLCAobG9uZykod2hpY2gpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYnVzKSwgKGxvbmcpKGRldmZuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcGNpY29uZmlnX3JlYWQoYnVzLCBkZm4sIG9mZiwgbGVuLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wY2ljb25maWdfcmVhZCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShidXMpLCAobG9uZykoZGZuKSwgKGxvbmcpKG9mZiksIChsb25nKShsZW4pLCAobG9uZykoYnVmKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3BjaWNvbmZpZ19yZWFkKHJlcywgYnVzLCBkZm4sIG9mZiwgbGVuLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGNpY29uZmlnX3JlYWQoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKGJ1cyksIChsb25nKShkZm4pLCAobG9uZykob2ZmKSwgKGxvbmcpKGxlbiksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9wY2ljb25maWdfd3JpdGUoYnVzLCBkZm4sIG9mZiwgbGVuLCBidWYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wY2ljb25maWdfd3JpdGUoICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykoYnVzKSwgKGxvbmcpKGRmbiksIChsb25nKShvZmYpLCAobG9uZykobGVuKSwgKGxvbmcpKGJ1ZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wY2ljb25maWdfd3JpdGUocmVzLCBidXMsIGRmbiwgb2ZmLCBsZW4sIGJ1ZikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wY2ljb25maWdfd3JpdGUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKGJ1cyksIChsb25nKShkZm4pLCAobG9uZykob2ZmKSwgKGxvbmcpKGxlbiksIChsb25nKShidWYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zd2Fwb24oc3BlY2lhbGZpbGUsIHN3YXBfZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zd2Fwb24oKGxvbmcpKHNwZWNpYWxmaWxlKSwgKGxvbmcpKHN3YXBfZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3dhcG9uKHJlcywgc3BlY2lhbGZpbGUsIHN3YXBfZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3dhcG9uKHJlcywgKGxvbmcpKHNwZWNpYWxmaWxlKSwgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3dhcF9mbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N3YXBvZmYoc3BlY2lhbGZpbGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zd2Fwb2ZmKChsb25nKShzcGVjaWFsZmlsZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zd2Fwb2ZmKHJlcywgc3BlY2lhbGZpbGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3dhcG9mZihyZXMsIChsb25nKShzcGVjaWFsZmlsZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5c2N0bChhcmdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3lzY3RsKChsb25nKShhcmdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5c2N0bChyZXMsIGFyZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3lzY3RsKHJlcywgKGxvbmcpKGFyZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeXNpbmZvKGluZm8pIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeXNpbmZvKChsb25nKShpbmZvKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5c2luZm8ocmVzLCBpbmZvKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5c2luZm8ocmVzLCAobG9uZykoaW5mbykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5c2ZzKG9wdGlvbiwgYXJnMSwgYXJnMikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2ZzKChsb25nKShvcHRpb24pLCAobG9uZykoYXJnMSksIChsb25nKShhcmcyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5c2ZzKHJlcywgb3B0aW9uLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5c2ZzKHJlcywgKGxvbmcpKG9wdGlvbiksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3N5c2xvZyh0eXBlLCBidWYsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2xvZygobG9uZykodHlwZSksIChsb25nKShidWYpLCAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5c2xvZyhyZXMsIHR5cGUsIGJ1ZiwgbGVuKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNsb2cocmVzLCAobG9uZykodHlwZSksIChsb25nKShidWYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobGVuKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdXNlbGliKGxpYnJhcnkpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91c2VsaWIoKGxvbmcpKGxpYnJhcnkpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdXNlbGliKHJlcywgbGlicmFyeSkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91c2VsaWIocmVzLCAobG9uZykobGlicmFyeSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25pX3N5c2NhbGwoKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmlfc3lzY2FsbCgpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9uaV9zeXNjYWxsKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uaV9zeXNjYWxsKHJlcykKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHRyYWNlKHJlcXVlc3QsIHBpZCwgYWRkciwgZGF0YSkgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B0cmFjZSgobG9uZykocmVxdWVzdCksIChsb25nKShwaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhZGRyKSwgKGxvbmcpKGRhdGEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHRyYWNlKHJlcywgcmVxdWVzdCwgcGlkLCBhZGRyLCBkYXRhKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B0cmFjZShyZXMsIChsb25nKShyZXF1ZXN0KSwgKGxvbmcpKHBpZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhZGRyKSwgKGxvbmcpKGRhdGEpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hZGRfa2V5KF90eXBlLCBfZGVzY3JpcHRpb24sIF9wYXlsb2FkLCBwbGVuLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJpbmdpZCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hZGRfa2V5KChsb25nKShfdHlwZSksIChsb25nKShfZGVzY3JpcHRpb24pLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKF9wYXlsb2FkKSwgKGxvbmcpKHBsZW4pLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZGVzdHJpbmdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hZGRfa2V5KHJlcywgX3R5cGUsIF9kZXNjcmlwdGlvbiwgX3BheWxvYWQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxlbiwgZGVzdHJpbmdpZCkgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hZGRfa2V5KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShfdHlwZSksIChsb25nKShfZGVzY3JpcHRpb24pLCAobG9uZykoX3BheWxvYWQpLCAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShwbGVuKSwgKGxvbmcpKGRlc3RyaW5naWQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZXF1ZXN0X2tleShfdHlwZSwgX2Rlc2NyaXB0aW9uLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWxsb3V0X2luZm8sIGRlc3RyaW5naWQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZXF1ZXN0X2tleSggICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKGxvbmcpKF90eXBlKSwgKGxvbmcpKF9kZXNjcmlwdGlvbiksIChsb25nKShfY2FsbG91dF9pbmZvKSwgICAgICBcCisgICAgICAobG9uZykoZGVzdHJpbmdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9yZXF1ZXN0X2tleShyZXMsIF90eXBlLCBfZGVzY3JpcHRpb24sICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FsbG91dF9pbmZvLCBkZXN0cmluZ2lkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlcXVlc3Rfa2V5KCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShfdHlwZSksIChsb25nKShfZGVzY3JpcHRpb24pLCAobG9uZykoX2NhbGxvdXRfaW5mbyksICBcCisgICAgICAobG9uZykoZGVzdHJpbmdpZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2tleWN0bChjbWQsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tleWN0bCgobG9uZykoY21kKSwgKGxvbmcpKGFyZzIpLCAobG9uZykoYXJnMyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9rZXljdGwocmVzLCBjbWQsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2V5Y3RsKHJlcywgKGxvbmcpKGNtZCksIChsb25nKShhcmcyKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzMpLCAobG9uZykoYXJnNCksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvcHJpb19zZXQod2hpY2gsIHdobywgaW9wcmlvKSAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvcHJpb19zZXQoKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShpb3ByaW8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW9wcmlvX3NldChyZXMsIHdoaWNoLCB3aG8sIGlvcHJpbykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9wcmlvX3NldChyZXMsIChsb25nKSh3aGljaCksIChsb25nKSh3aG8pLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGlvcHJpbykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lvcHJpb19nZXQod2hpY2gsIHdobykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvcHJpb19nZXQoKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pb3ByaW9fZ2V0KHJlcywgd2hpY2gsIHdobykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb3ByaW9fZ2V0KHJlcywgKGxvbmcpKHdoaWNoKSwgKGxvbmcpKHdobykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldF9tZW1wb2xpY3kobW9kZSwgbm1hc2ssIG1heG5vZGUpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfbWVtcG9saWN5KChsb25nKShtb2RlKSwgKGxvbmcpKG5tYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1heG5vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0X21lbXBvbGljeShyZXMsIG1vZGUsIG5tYXNrLCBtYXhub2RlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF9tZW1wb2xpY3kocmVzLCAobG9uZykobW9kZSksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobm1hc2spLCAobG9uZykobWF4bm9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21pZ3JhdGVfcGFnZXMocGlkLCBtYXhub2RlLCBmcm9tLCB0bykgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWlncmF0ZV9wYWdlcygobG9uZykocGlkKSwgKGxvbmcpKG1heG5vZGUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZnJvbSksIChsb25nKSh0bykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9taWdyYXRlX3BhZ2VzKHJlcywgcGlkLCBtYXhub2RlLCBmcm9tLCB0bykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9taWdyYXRlX3BhZ2VzKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShtYXhub2RlKSwgKGxvbmcpKGZyb20pLCAobG9uZykodG8pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9tb3ZlX3BhZ2VzKHBpZCwgbnJfcGFnZXMsIHBhZ2VzLCBub2RlcywgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGZsYWdzKSAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbW92ZV9wYWdlcygobG9uZykocGlkKSwgKGxvbmcpKG5yX3BhZ2VzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBhZ2VzKSwgKGxvbmcpKG5vZGVzKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0dXMpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbW92ZV9wYWdlcyhyZXMsIHBpZCwgbnJfcGFnZXMsIHBhZ2VzLCBub2RlcywgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBmbGFncykgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21vdmVfcGFnZXMocmVzLCAobG9uZykocGlkKSwgKGxvbmcpKG5yX3BhZ2VzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwYWdlcyksIChsb25nKShub2RlcyksICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3RhdHVzKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWJpbmQoc3RhcnQsIGxlbiwgbW9kZSwgbm1hc2ssIG1heG5vZGUsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWJpbmQoKGxvbmcpKHN0YXJ0KSwgKGxvbmcpKGxlbiksIChsb25nKShtb2RlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShubWFzayksIChsb25nKShtYXhub2RlKSwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWJpbmQocmVzLCBzdGFydCwgbGVuLCBtb2RlLCBubWFzaywgbWF4bm9kZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tYmluZChyZXMsIChsb25nKShzdGFydCksIChsb25nKShsZW4pLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShubWFzayksICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWF4bm9kZSksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldF9tZW1wb2xpY3kocG9saWN5LCBubWFzaywgbWF4bm9kZSwgYWRkciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRfbWVtcG9saWN5KChsb25nKShwb2xpY3kpLCAobG9uZykobm1hc2spLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobWF4bm9kZSksIChsb25nKShhZGRyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldF9tZW1wb2xpY3kocmVzLCBwb2xpY3ksIG5tYXNrLCBtYXhub2RlLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwgZmxhZ3MpICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0X21lbXBvbGljeShyZXMsIChsb25nKShwb2xpY3kpLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobm1hc2spLCAobG9uZykobWF4bm9kZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYWRkciksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lub3RpZnlfaW5pdCgpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbm90aWZ5X2luaXQoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW5vdGlmeV9pbml0KHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2luaXQocmVzKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbm90aWZ5X2luaXQxKGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5vdGlmeV9pbml0MSgobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW5vdGlmeV9pbml0MShyZXMsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lub3RpZnlfaW5pdDEocmVzLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbm90aWZ5X2FkZF93YXRjaChmZCwgcGF0aCwgbWFzaykgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfYWRkX3dhdGNoKChsb25nKShmZCksIChsb25nKShwYXRoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtYXNrKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lub3RpZnlfYWRkX3dhdGNoKHJlcywgZmQsIHBhdGgsIG1hc2spIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5vdGlmeV9hZGRfd2F0Y2gocmVzLCAobG9uZykoZmQpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHBhdGgpLCAobG9uZykobWFzaykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lub3RpZnlfcm1fd2F0Y2goZmQsIHdkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW5vdGlmeV9ybV93YXRjaCgobG9uZykoZmQpLCAobG9uZykod2QpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW5vdGlmeV9ybV93YXRjaChyZXMsIGZkLCB3ZCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X3JtX3dhdGNoKHJlcywgKGxvbmcpKGZkKSwgKGxvbmcpKHdkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3B1X3J1bihmZCwgdW5wYywgdXN0YXR1cykgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NwdV9ydW4oKGxvbmcpKGZkKSwgKGxvbmcpKHVucGMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXN0YXR1cykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zcHVfcnVuKHJlcywgZmQsIHVucGMsIHVzdGF0dXMpICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3B1X3J1bihyZXMsIChsb25nKShmZCksIChsb25nKSh1bnBjKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1c3RhdHVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3B1X2NyZWF0ZShuYW1lLCBmbGFncywgbW9kZSwgZmQpICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NwdV9jcmVhdGUoKGxvbmcpKG5hbWUpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSksIChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zcHVfY3JlYXRlKHJlcywgbmFtZSwgZmxhZ3MsIG1vZGUsIGZkKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3B1X2NyZWF0ZShyZXMsIChsb25nKShuYW1lKSwgKGxvbmcpKGZsYWdzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbWtub2RhdChkZmQsIGZpbGVuYW1lLCBtb2RlLCBkZXYpICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWtub2RhdCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpLCAobG9uZykoZGV2KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21rbm9kYXQocmVzLCBkZmQsIGZpbGVuYW1lLCBtb2RlLCBkZXYpICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rbm9kYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSwgKGxvbmcpKGRldikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21rZGlyYXQoZGZkLCBwYXRobmFtZSwgbW9kZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rZGlyYXQoKGxvbmcpKGRmZCksIChsb25nKShwYXRobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21rZGlyYXQocmVzLCBkZmQsIHBhdGhuYW1lLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rZGlyYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKHBhdGhuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShtb2RlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdW5saW5rYXQoZGZkLCBwYXRobmFtZSwgZmxhZykgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VubGlua2F0KChsb25nKShkZmQpLCAobG9uZykocGF0aG5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdW5saW5rYXQocmVzLCBkZmQsIHBhdGhuYW1lLCBmbGFnKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VubGlua2F0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShwYXRobmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeW1saW5rYXQob2xkbmFtZSwgbmV3ZGZkLCBuZXduYW1lKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3ltbGlua2F0KChsb25nKShvbGRuYW1lKSwgKGxvbmcpKG5ld2RmZCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld25hbWUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc3ltbGlua2F0KHJlcywgb2xkbmFtZSwgbmV3ZGZkLCBuZXduYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bWxpbmthdChyZXMsIChsb25nKShvbGRuYW1lKSwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdkZmQpLCAobG9uZykobmV3bmFtZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2xpbmthdChvbGRkZmQsIG9sZG5hbWUsIG5ld2RmZCwgbmV3bmFtZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saW5rYXQoKGxvbmcpKG9sZGRmZCksIChsb25nKShvbGRuYW1lKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShuZXdkZmQpLCAobG9uZykobmV3bmFtZSksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbGlua2F0KHJlcywgb2xkZGZkLCBvbGRuYW1lLCBuZXdkZmQsIG5ld25hbWUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xpbmthdChyZXMsIChsb25nKShvbGRkZmQpLCAobG9uZykob2xkbmFtZSksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld2RmZCksIChsb25nKShuZXduYW1lKSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3JlbmFtZWF0KG9sZGRmZCwgb2xkbmFtZSwgbmV3ZGZkLCBuZXduYW1lKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVuYW1lYXQoKGxvbmcpKG9sZGRmZCksIChsb25nKShvbGRuYW1lKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld2RmZCksIChsb25nKShuZXduYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlbmFtZWF0KHJlcywgb2xkZGZkLCBvbGRuYW1lLCBuZXdkZmQsICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXduYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW5hbWVhdChyZXMsIChsb25nKShvbGRkZmQpLCAobG9uZykob2xkbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5ld2RmZCksIChsb25nKShuZXduYW1lKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnV0aW1lc2F0KGRmZCwgZmlsZW5hbWUsIHV0aW1lcykgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mdXRpbWVzYXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHV0aW1lcykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mdXRpbWVzYXQocmVzLCBkZmQsIGZpbGVuYW1lLCB1dGltZXMpICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Z1dGltZXNhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXRpbWVzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmFjY2Vzc2F0KGRmZCwgZmlsZW5hbWUsIG1vZGUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mYWNjZXNzYXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFjY2Vzc2F0KHJlcywgZGZkLCBmaWxlbmFtZSwgbW9kZSkgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mYWNjZXNzYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY2htb2RhdChkZmQsIGZpbGVuYW1lLCBtb2RlKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNobW9kYXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mY2htb2RhdChyZXMsIGRmZCwgZmlsZW5hbWUsIG1vZGUpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNobW9kYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykobW9kZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ZjaG93bmF0KGRmZCwgZmlsZW5hbWUsIHVzZXIsIGdyb3VwLCBmbGFnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNob3duYXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHVzZXIpLCAobG9uZykoZ3JvdXApLCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmNob3duYXQocmVzLCBkZmQsIGZpbGVuYW1lLCB1c2VyLCBncm91cCwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXNlciksIChsb25nKShncm91cCksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb3BlbmF0KGRmZCwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKSAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vcGVuYXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSwgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb3BlbmF0KHJlcywgZGZkLCBmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vcGVuYXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSwgKGxvbmcpKG1vZGUpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uZXdmc3RhdGF0KGRmZCwgZmlsZW5hbWUsIHN0YXRidWYsIGZsYWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdmc3RhdGF0KChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3RhdGJ1ZiksIChsb25nKShmbGFnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25ld2ZzdGF0YXQocmVzLCBkZmQsIGZpbGVuYW1lLCBzdGF0YnVmLCBmbGFnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld2ZzdGF0YXQocmVzLCAobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0YnVmKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mc3RhdGF0NjQoZGZkLCBmaWxlbmFtZSwgc3RhdGJ1ZiwgZmxhZykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0YXQ2NCgobG9uZykoZGZkKSwgKGxvbmcpKGZpbGVuYW1lKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc3RhdGJ1ZiksIChsb25nKShmbGFnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZzdGF0YXQ2NChyZXMsIGRmZCwgZmlsZW5hbWUsIHN0YXRidWYsIGZsYWcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXRhdDY0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShzdGF0YnVmKSwgKGxvbmcpKGZsYWcpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWFkbGlua2F0KGRmZCwgcGF0aCwgYnVmLCBidWZzaXopICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWRsaW5rYXQoKGxvbmcpKGRmZCksIChsb25nKShwYXRoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGJ1ZiksIChsb25nKShidWZzaXopKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcmVhZGxpbmthdChyZXMsIGRmZCwgcGF0aCwgYnVmLCBidWZzaXopICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkbGlua2F0KHJlcywgKGxvbmcpKGRmZCksIChsb25nKShwYXRoKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShidWYpLCAobG9uZykoYnVmc2l6KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdXRpbWVuc2F0KGRmZCwgZmlsZW5hbWUsIHV0aW1lcywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91dGltZW5zYXQoKGxvbmcpKGRmZCksIChsb25nKShmaWxlbmFtZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHV0aW1lcyksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91dGltZW5zYXQocmVzLCBkZmQsIGZpbGVuYW1lLCB1dGltZXMsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3V0aW1lbnNhdChyZXMsIChsb25nKShkZmQpLCAobG9uZykoZmlsZW5hbWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykodXRpbWVzKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdW5zaGFyZSh1bnNoYXJlX2ZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5zaGFyZSgobG9uZykodW5zaGFyZV9mbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91bnNoYXJlKHJlcywgdW5zaGFyZV9mbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bnNoYXJlKHJlcywgKGxvbmcpKHVuc2hhcmVfZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zcGxpY2UoZmRfaW4sIG9mZl9pbiwgZmRfb3V0LCBvZmZfb3V0LCBsZW4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3BsaWNlKChsb25nKShmZF9pbiksIChsb25nKShvZmZfaW4pLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmRfb3V0KSwgKGxvbmcpKG9mZl9vdXQpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbiksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zcGxpY2UocmVzLCBmZF9pbiwgb2ZmX2luLCBmZF9vdXQsIG9mZl9vdXQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4sIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcGxpY2UocmVzLCAobG9uZykoZmRfaW4pLCAobG9uZykob2ZmX2luKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmRfb3V0KSwgKGxvbmcpKG9mZl9vdXQpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShsZW4pLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV92bXNwbGljZShmZCwgaW92LCBucl9zZWdzLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Ztc3BsaWNlKChsb25nKShmZCksIChsb25nKShpb3YpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShucl9zZWdzKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Ztc3BsaWNlKHJlcywgZmQsIGlvdiwgbnJfc2VncywgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdm1zcGxpY2UocmVzLCAobG9uZykoZmQpLCAobG9uZykoaW92KSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKG5yX3NlZ3MpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90ZWUoZmRpbiwgZmRvdXQsIGxlbiwgZmxhZ3MpICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGVlKChsb25nKShmZGluKSwgKGxvbmcpKGZkb3V0KSwgKGxvbmcpKGxlbiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RlZShyZXMsIGZkaW4sIGZkb3V0LCBsZW4sIGZsYWdzKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RlZShyZXMsIChsb25nKShmZGluKSwgKGxvbmcpKGZkb3V0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGxlbiksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldF9yb2J1c3RfbGlzdChwaWQsIGhlYWRfcHRyLCBsZW5fcHRyKSAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0X3JvYnVzdF9saXN0KChsb25nKShwaWQpLCAobG9uZykoaGVhZF9wdHIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShsZW5fcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldF9yb2J1c3RfbGlzdChyZXMsIHBpZCwgaGVhZF9wdHIsIGxlbl9wdHIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0X3JvYnVzdF9saXN0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShoZWFkX3B0ciksIChsb25nKShsZW5fcHRyKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0X3JvYnVzdF9saXN0KGhlYWQsIGxlbikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldF9yb2J1c3RfbGlzdCgobG9uZykoaGVhZCksIChsb25nKShsZW4pKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0X3JvYnVzdF9saXN0KHJlcywgaGVhZCwgbGVuKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldF9yb2J1c3RfbGlzdChyZXMsIChsb25nKShoZWFkKSwgKGxvbmcpKGxlbikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGNwdShjcHUsIG5vZGUsIGNhY2hlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Y3B1KChsb25nKShjcHUpLCAobG9uZykobm9kZSksIChsb25nKShjYWNoZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRjcHUocmVzLCBjcHUsIG5vZGUsIGNhY2hlKSAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Y3B1KHJlcywgKGxvbmcpKGNwdSksIChsb25nKShub2RlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGNhY2hlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2lnbmFsZmQodWZkLCB1c2VyX21hc2ssIHNpemVtYXNrKSAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWxmZCgobG9uZykodWZkKSwgKGxvbmcpKHVzZXJfbWFzayksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZW1hc2spKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2lnbmFsZmQocmVzLCB1ZmQsIHVzZXJfbWFzaywgc2l6ZW1hc2spICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWduYWxmZChyZXMsIChsb25nKSh1ZmQpLCAobG9uZykodXNlcl9tYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZW1hc2spKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWduYWxmZDQodWZkLCB1c2VyX21hc2ssIHNpemVtYXNrLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ25hbGZkNCgobG9uZykodWZkKSwgKGxvbmcpKHVzZXJfbWFzayksICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoc2l6ZW1hc2spLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2lnbmFsZmQ0KHJlcywgdWZkLCB1c2VyX21hc2ssIHNpemVtYXNrLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbGZkNChyZXMsIChsb25nKSh1ZmQpLCAobG9uZykodXNlcl9tYXNrKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHNpemVtYXNrKSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdGltZXJmZF9jcmVhdGUoY2xvY2tpZCwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX2NyZWF0ZSgobG9uZykoY2xvY2tpZCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF90aW1lcmZkX2NyZWF0ZShyZXMsIGNsb2NraWQsIGZsYWdzKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyZmRfY3JlYXRlKHJlcywgKGxvbmcpKGNsb2NraWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyZmRfc2V0dGltZSh1ZmQsIGZsYWdzLCB1dG1yLCBvdG1yKSAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZXJmZF9zZXR0aW1lKChsb25nKSh1ZmQpLCAobG9uZykoZmxhZ3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSh1dG1yKSwgKGxvbmcpKG90bXIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdGltZXJmZF9zZXR0aW1lKHJlcywgdWZkLCBmbGFncywgdXRtciwgb3RtcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX3NldHRpbWUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykodWZkKSwgKGxvbmcpKGZsYWdzKSwgKGxvbmcpKHV0bXIpLCAobG9uZykob3RtcikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RpbWVyZmRfZ2V0dGltZSh1ZmQsIG90bXIpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX2dldHRpbWUoKGxvbmcpKHVmZCksIChsb25nKShvdG1yKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3RpbWVyZmRfZ2V0dGltZShyZXMsIHVmZCwgb3RtcikgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX2dldHRpbWUocmVzLCAobG9uZykodWZkKSwgKGxvbmcpKG90bXIpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ldmVudGZkKGNvdW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXZlbnRmZCgobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXZlbnRmZChyZXMsIGNvdW50KSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2V2ZW50ZmQocmVzLCAobG9uZykoY291bnQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9ldmVudGZkMihjb3VudCwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ldmVudGZkMigobG9uZykoY291bnQpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXZlbnRmZDIocmVzLCBjb3VudCwgZmxhZ3MpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXZlbnRmZDIocmVzLCAobG9uZykoY291bnQpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGRfcmVhZGRpcihhcmcwLCBhcmcxLCBhcmcyKSAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX3JlYWRkaXIoKGxvbmcpKGFyZzApLCAobG9uZykoYXJnMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRfcmVhZGRpcihyZXMsIGFyZzAsIGFyZzEsIGFyZzIpICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX3JlYWRkaXIocmVzLCAobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BzZWxlY3Q2KGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wc2VsZWN0NigobG9uZykoYXJnMCksIChsb25nKShhcmcxKSwgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wc2VsZWN0NihyZXMsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wc2VsZWN0NihyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpLCAobG9uZykoYXJnNSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Bwb2xsKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Bwb2xsKChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAobG9uZykoYXJnMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoYXJnMyksIChsb25nKShhcmc0KSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Bwb2xsKHJlcywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcG9sbChyZXMsIChsb25nKShhcmcwKSwgKGxvbmcpKGFyZzEpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShhcmcyKSwgKGxvbmcpKGFyZzMpLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKGFyZzQpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zeW5jZnMoZmQpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zeW5jZnMoKGxvbmcpKGZkKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N5bmNmcyhyZXMsIGZkKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bmNmcyhyZXMsIChsb25nKShmZCkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3BlcmZfZXZlbnRfb3BlbihhdHRyX3VwdHIsIHBpZCwgY3B1LCBncm91cF9mZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wZXJmX2V2ZW50X29wZW4oKGxvbmcpKGF0dHJfdXB0ciksIChsb25nKShwaWQpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShjcHUpLCAobG9uZykoZ3JvdXBfZmQpLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcGVyZl9ldmVudF9vcGVuKHJlcywgYXR0cl91cHRyLCBwaWQsIGNwdSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwX2ZkLCBmbGFncykgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wZXJmX2V2ZW50X29wZW4oICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykoYXR0cl91cHRyKSwgKGxvbmcpKHBpZCksIChsb25nKShjcHUpLCAobG9uZykoZ3JvdXBfZmQpLCAgXAorICAgICAgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbW1hcF9wZ29mZihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tbWFwX3Bnb2ZmKChsb25nKShhZGRyKSwgKGxvbmcpKGxlbiksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShwcm90KSwgKGxvbmcpKGZsYWdzKSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKShmZCksIChsb25nKShwZ29mZikpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tbWFwX3Bnb2ZmKHJlcywgYWRkciwgbGVuLCBwcm90LCBmbGFncywgZmQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdvZmYpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbWFwX3Bnb2ZmKHJlcywgKGxvbmcpKGFkZHIpLCAobG9uZykobGVuKSwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpKHByb3QpLCAobG9uZykoZmxhZ3MpLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykoZmQpLCAobG9uZykocGdvZmYpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGRfbW1hcChhcmcpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfbW1hcCgobG9uZykoYXJnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZF9tbWFwKHJlcywgYXJnKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9tbWFwKHJlcywgKGxvbmcpKGFyZykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX25hbWVfdG9faGFuZGxlX2F0KGRmZCwgbmFtZSwgaGFuZGxlLCBtbnRfaWQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZykgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25hbWVfdG9faGFuZGxlX2F0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykoZGZkKSwgKGxvbmcpKG5hbWUpLCAobG9uZykoaGFuZGxlKSwgKGxvbmcpKG1udF9pZCksIChsb25nKShmbGFnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25hbWVfdG9faGFuZGxlX2F0KHJlcywgZGZkLCBuYW1lLCBoYW5kbGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1udF9pZCwgZmxhZykgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmFtZV90b19oYW5kbGVfYXQoICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKGRmZCksIChsb25nKShuYW1lKSwgKGxvbmcpKGhhbmRsZSksIChsb25nKShtbnRfaWQpLCAgICAgIFwKKyAgICAgIChsb25nKShmbGFnKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb3Blbl9ieV9oYW5kbGVfYXQobW91bnRkaXJmZCwgaGFuZGxlLCBmbGFncykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29wZW5fYnlfaGFuZGxlX2F0KCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAobG9uZykobW91bnRkaXJmZCksIChsb25nKShoYW5kbGUpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb3Blbl9ieV9oYW5kbGVfYXQocmVzLCBtb3VudGRpcmZkLCBoYW5kbGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSAgICAgICAgICAgICAgICAgICBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW5fYnlfaGFuZGxlX2F0KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcmVzLCAobG9uZykobW91bnRkaXJmZCksIChsb25nKShoYW5kbGUpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRucyhmZCwgbnN0eXBlKSBcCisgIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0bnMoKGxvbmcpKGZkKSwgKGxvbmcpKG5zdHlwZSkpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRucyhyZXMsIGZkLCBuc3R5cGUpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0bnMocmVzLCAobG9uZykoZmQpLCAobG9uZykobnN0eXBlKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJvY2Vzc192bV9yZWFkdihwaWQsIGx2ZWMsIGxpb3ZjbnQsIHJ2ZWMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW92Y250LCBmbGFncykgICAgICAgICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcm9jZXNzX3ZtX3JlYWR2KCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShwaWQpLCAobG9uZykobHZlYyksIChsb25nKShsaW92Y250KSwgKGxvbmcpKHJ2ZWMpLCAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShyaW92Y250KSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Byb2Nlc3Nfdm1fcmVhZHYocmVzLCBwaWQsIGx2ZWMsIGxpb3ZjbnQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZlYywgcmlvdmNudCwgZmxhZ3MpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJvY2Vzc192bV9yZWFkdiggICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJlcywgKGxvbmcpKHBpZCksIChsb25nKShsdmVjKSwgKGxvbmcpKGxpb3ZjbnQpLCAobG9uZykocnZlYyksICAgICAgIFwKKyAgICAgIChsb25nKShyaW92Y250KSwgKGxvbmcpKGZsYWdzKSkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJvY2Vzc192bV93cml0ZXYocGlkLCBsdmVjLCBsaW92Y250LCBydmVjLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpb3ZjbnQsIGZsYWdzKSAgICAgICAgICAgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Byb2Nlc3Nfdm1fd3JpdGV2KCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChsb25nKShwaWQpLCAobG9uZykobHZlYyksIChsb25nKShsaW92Y250KSwgKGxvbmcpKHJ2ZWMpLCAgICAgICAgICAgICBcCisgICAgICAobG9uZykocmlvdmNudCksIChsb25nKShmbGFncykpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcm9jZXNzX3ZtX3dyaXRldihyZXMsIHBpZCwgbHZlYywgbGlvdmNudCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZlYywgcmlvdmNudCwgZmxhZ3MpICAgIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJvY2Vzc192bV93cml0ZXYoICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXMsIChsb25nKShwaWQpLCAobG9uZykobHZlYyksIChsb25nKShsaW92Y250KSwgKGxvbmcpKHJ2ZWMpLCAgICAgICAgXAorICAgICAgKGxvbmcpKHJpb3ZjbnQpLCAobG9uZykoZmxhZ3MpKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mb3JrKCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZvcmsoKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZm9yayhyZXMpIFwKKyAgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZm9yayhyZXMpCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Zmb3JrKCkgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Zmb3JrKCkKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3Zmb3JrKHJlcykgXAorICBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92Zm9yayhyZXMpCisKKy8vIEFuZCBub3cgYSBmZXcgc3lzY2FsbHMgd2UgZG9uJ3QgaGFuZGxlIHlldC4KKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYWZzX3N5c2NhbGwoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9hcmNoX3ByY3RsKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfYnJlYWsoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jaG93bjMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfY2xvbmUoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9jcmVhdGVfbW9kdWxlKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXBvbGxfY3RsX29sZCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Vwb2xsX3dhaXRfb2xkKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZXhlY3ZlKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmFkdmlzZTY0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmFkdmlzZTY0XzY0KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmFsbG9jYXRlKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZmFub3RpZnlfaW5pdCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Zhbm90aWZ5X21hcmsoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mY2hvd24zMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2Z0aW1lKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZnRydW5jYXRlNjQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9mdXRleCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGVnaWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGV1aWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldGdpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0Z3JvdXBzMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRfa2VybmVsX3N5bXMoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRwbXNnKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ2V0cmVzZ2lkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9nZXRyZXN1aWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldF90aHJlYWRfYXJlYSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2dldHVpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfZ3R0eSguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2lkbGUoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pb3BsKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbGNob3duMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9fbGxzZWVrKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbG9jayguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21hZHZpc2UxKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbW1hcCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21tYXAyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfbW9kaWZ5X2xkdCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX21weCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX19uZXdzZWxlY3QoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9uZnNzZXJ2Y3RsKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkZnN0YXQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9vbGRsc3RhdCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX29sZG9sZHVuYW1lKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfb2xkc3RhdCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ByY3RsKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcHJvZiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Byb2ZpbCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3B1dHBtc2coLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9xdWVyeV9tb2R1bGUoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWFkYWhlYWQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9yZWFkZGlyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lnYWN0aW9uKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lncmV0dXJuKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfcnRfc2lnc3VzcGVuZCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NlY3VyaXR5KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0ZnNnaWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGZzdWlkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRnaWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldGdyb3VwczMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVnaWQzMiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NldHJlc2dpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0cmVzdWlkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zZXRyZXVpZDMyKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0X3RocmVhZF9hcmVhKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc2V0dWlkMzIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdhY3Rpb24oLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zaWdhbHRzdGFjayguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ3JldHVybiguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3NpZ3N1c3BlbmQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9zdHR5KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfc3luY19maWxlX3JhbmdlKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfX3N5c2N0bCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3RydW5jYXRlNjQoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV90dXhjYWxsKC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdWdldHJsaW1pdCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3VsaW1pdCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3Vtb3VudDIoLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV92bTg2KC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfdm04Nm9sZCguLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX3ZzZXJ2ZXIoLi4uKQorCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9hZnNfc3lzY2FsbChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2FyY2hfcHJjdGwocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9icmVhayhyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Nob3duMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9jbG9uZShyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2NyZWF0ZV9tb2R1bGUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9lcG9sbF9jdGxfb2xkKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZXBvbGxfd2FpdF9vbGQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9leGVjdmUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mYWR2aXNlNjQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mYWR2aXNlNjRfNjQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mYWxsb2NhdGUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mYW5vdGlmeV9pbml0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZmFub3RpZnlfbWFyayhyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ZjaG93bjMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZnRpbWUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9mdHJ1bmNhdGU2NChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2Z1dGV4KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZWdpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0ZXVpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0Z2lkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRncm91cHMzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldF9rZXJuZWxfc3ltcyhyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHBtc2cocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9nZXRyZXNnaWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2dldHJlc3VpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0X3RocmVhZF9hcmVhKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfZ2V0dWlkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ndHR5KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaWRsZShyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2lvcGwocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sY2hvd24zMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X19sbHNlZWsocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9sb2NrKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbWFkdmlzZTEocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tbWFwMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X21tYXAocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9tb2RpZnlfbGR0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfbXB4KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfX25ld3NlbGVjdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X25mc3NlcnZjdGwocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRmc3RhdChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X29sZGxzdGF0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfb2xkb2xkdW5hbWUocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9vbGRzdGF0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHJjdGwocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcm9maWwocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9wcm9mKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfcHV0cG1zZyhyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3F1ZXJ5X21vZHVsZShyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYWRhaGVhZChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3JlYWRkaXIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF9zaWdhY3Rpb24ocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF9zaWdyZXR1cm4ocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9ydF9zaWdzdXNwZW5kKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2VjdXJpdHkocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRmc2dpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0ZnN1aWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldGdpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0Z3JvdXBzMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZWdpZDMyKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2V0cmVzZ2lkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRyZXN1aWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NldHJldWlkMzIocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXRfdGhyZWFkX2FyZWEocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zZXR1aWQzMihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ2FjdGlvbihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3NpZ2FsdHN0YWNrKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2lncmV0dXJuKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3Rfc2lnc3VzcGVuZChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3N0dHkocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9zeW5jX2ZpbGVfcmFuZ2UocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9fc3lzY3RsKHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdHJ1bmNhdGU2NChyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3R1eGNhbGwocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF91Z2V0cmxpbWl0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdWxpbWl0KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdW1vdW50MihyZXMsIC4uLikKKyNkZWZpbmUgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X3ZtODZvbGQocmVzLCAuLi4pCisjZGVmaW5lIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF92bTg2KHJlcywgLi4uKQorI2RlZmluZSBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfdnNlcnZlcihyZXMsIC4uLikKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvLyBQcml2YXRlIGRlY2xhcmF0aW9ucy4gRG8gbm90IGNhbGwgZGlyZWN0bHkgZnJvbSB1c2VyIGNvZGUuIFVzZSBtYWNyb3MgYWJvdmUuCit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGltZShsb25nIHRsb2MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lKGxvbmcgcmVzLCBsb25nIHRsb2MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0aW1lKGxvbmcgdHB0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0aW1lKGxvbmcgcmVzLCBsb25nIHRwdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHRpbWVvZmRheShsb25nIHR2LCBsb25nIHR6KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dGltZW9mZGF5KGxvbmcgcmVzLCBsb25nIHR2LCBsb25nIHR6KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR0aW1lb2ZkYXkobG9uZyB0diwgbG9uZyB0eik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHRpbWVvZmRheShsb25nIHJlcywgbG9uZyB0diwgbG9uZyB0eik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWRqdGltZXgobG9uZyB0eGNfcCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FkanRpbWV4KGxvbmcgcmVzLCBsb25nIHR4Y19wKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcyhsb25nIHRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcyhsb25nIHJlcywgbG9uZyB0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXR0aWQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0dGlkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uYW5vc2xlZXAobG9uZyBycXRwLCBsb25nIHJtdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uYW5vc2xlZXAobG9uZyByZXMsIGxvbmcgcnF0cCwgbG9uZyBybXRwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hbGFybShsb25nIHNlY29uZHMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hbGFybShsb25nIHJlcywgbG9uZyBzZWNvbmRzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwaWQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cGlkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwcGlkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBwaWQobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHVpZCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXR1aWQobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGV1aWQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZXVpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z2lkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdpZChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZWdpZCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRlZ2lkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXN1aWQobG9uZyBydWlkLCBsb25nIGV1aWQsIGxvbmcgc3VpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc3VpZChsb25nIHJlcywgbG9uZyBydWlkLCBsb25nIGV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJlc2dpZChsb25nIHJnaWQsIGxvbmcgZWdpZCwgbG9uZyBzZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cmVzZ2lkKGxvbmcgcmVzLCBsb25nIHJnaWQsIGxvbmcgZWdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cGdpZChsb25nIHBpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBnaWQobG9uZyByZXMsIGxvbmcgcGlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwZ3JwKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHBncnAobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHNpZChsb25nIHBpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNpZChsb25nIHJlcywgbG9uZyBwaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGdyb3Vwcyhsb25nIGdpZHNldHNpemUsIGxvbmcgZ3JvdXBsaXN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0Z3JvdXBzKGxvbmcgcmVzLCBsb25nIGdpZHNldHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVnaWQobG9uZyByZ2lkLCBsb25nIGVnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZWdpZChsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGdpZChsb25nIGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdpZChsb25nIHJlcywgbG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJldWlkKGxvbmcgcnVpZCwgbG9uZyBldWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmV1aWQobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR1aWQobG9uZyB1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR1aWQobG9uZyByZXMsIGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRyZXN1aWQobG9uZyBydWlkLCBsb25nIGV1aWQsIGxvbmcgc3VpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc3VpZChsb25nIHJlcywgbG9uZyBydWlkLCBsb25nIGV1aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc2dpZChsb25nIHJnaWQsIGxvbmcgZWdpZCwgbG9uZyBzZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0cmVzZ2lkKGxvbmcgcmVzLCBsb25nIHJnaWQsIGxvbmcgZWdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZnN1aWQobG9uZyB1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRmc3VpZChsb25nIHJlcywgbG9uZyB1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzZ2lkKGxvbmcgZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnNnaWQobG9uZyByZXMsIGxvbmcgZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRwZ2lkKGxvbmcgcGlkLCBsb25nIHBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRwZ2lkKGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyBwZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRzaWQoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0c2lkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRncm91cHMobG9uZyBnaWRzZXRzaXplLCBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdyb3Vwcyhsb25nIHJlcywgbG9uZyBnaWRzZXRzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cGxpc3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FjY3QobG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYWNjdChsb25nIHJlcywgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jYXBnZXQobG9uZyBoZWFkZXIsIGxvbmcgZGF0YXB0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2NhcGdldChsb25nIHJlcywgbG9uZyBoZWFkZXIsIGxvbmcgZGF0YXB0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2Fwc2V0KGxvbmcgaGVhZGVyLCBsb25nIGRhdGEpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jYXBzZXQobG9uZyByZXMsIGxvbmcgaGVhZGVyLCBsb25nIGRhdGEpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BlcnNvbmFsaXR5KGxvbmcgcGVyc29uYWxpdHkpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wZXJzb25hbGl0eShsb25nIHJlcywgbG9uZyBwZXJzb25hbGl0eSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2lncGVuZGluZyhsb25nIHNldCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ3BlbmRpbmcobG9uZyByZXMsIGxvbmcgc2V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWdwcm9jbWFzayhsb25nIGhvdywgbG9uZyBzZXQsIGxvbmcgb3NldCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ3Byb2NtYXNrKGxvbmcgcmVzLCBsb25nIGhvdywgbG9uZyBzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3NldCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0aXRpbWVyKGxvbmcgd2hpY2gsIGxvbmcgdmFsdWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRpdGltZXIobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgdmFsdWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGl0aW1lcihsb25nIHdoaWNoLCBsb25nIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG92YWx1ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGl0aW1lcihsb25nIHJlcywgbG9uZyB3aGljaCwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3ZhbHVlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcl9jcmVhdGUobG9uZyB3aGljaF9jbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lcl9ldmVudF9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNyZWF0ZWRfdGltZXJfaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcl9jcmVhdGUobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVyX2V2ZW50X3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNyZWF0ZWRfdGltZXJfaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2dldHRpbWUobG9uZyB0aW1lcl9pZCwgbG9uZyBzZXR0aW5nKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfZ2V0dGltZShsb25nIHJlcywgbG9uZyB0aW1lcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNldHRpbmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2dldG92ZXJydW4obG9uZyB0aW1lcl9pZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyX2dldG92ZXJydW4obG9uZyByZXMsIGxvbmcgdGltZXJfaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX3NldHRpbWUobG9uZyB0aW1lcl9pZCwgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3X3NldHRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9sZF9zZXR0aW5nKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfc2V0dGltZShsb25nIHJlcywgbG9uZyB0aW1lcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIG5ld19zZXR0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2xkX3NldHRpbmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyX2RlbGV0ZShsb25nIHRpbWVyX2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGltZXJfZGVsZXRlKGxvbmcgcmVzLCBsb25nIHRpbWVyX2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19zZXR0aW1lKGxvbmcgd2hpY2hfY2xvY2ssIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9ja19zZXR0aW1lKGxvbmcgcmVzLCBsb25nIHdoaWNoX2Nsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX2dldHRpbWUobG9uZyB3aGljaF9jbG9jaywgbG9uZyB0cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2dldHRpbWUobG9uZyByZXMsIGxvbmcgd2hpY2hfY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfY2xvY2tfYWRqdGltZShsb25nIHdoaWNoX2Nsb2NrLCBsb25nIHR4KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2xvY2tfYWRqdGltZShsb25nIHJlcywgbG9uZyB3aGljaF9jbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHR4KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jbG9ja19nZXRyZXMobG9uZyB3aGljaF9jbG9jaywgbG9uZyB0cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX2dldHJlcyhsb25nIHJlcywgbG9uZyB3aGljaF9jbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdHApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb2NrX25hbm9zbGVlcChsb25nIHdoaWNoX2Nsb2NrLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJxdHAsIGxvbmcgcm10cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nsb2NrX25hbm9zbGVlcChsb25nIHJlcywgbG9uZyB3aGljaF9jbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgcnF0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcm10cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmljZShsb25nIGluY3JlbWVudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25pY2UobG9uZyByZXMsIGxvbmcgaW5jcmVtZW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRzY2hlZHVsZXIobG9uZyBwaWQsIGxvbmcgcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhcmFtKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfc2V0c2NoZWR1bGVyKGxvbmcgcmVzLCBsb25nIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9saWN5LCBsb25nIHBhcmFtKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9zZXRwYXJhbShsb25nIHBpZCwgbG9uZyBwYXJhbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3NldHBhcmFtKGxvbmcgcmVzLCBsb25nIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwYXJhbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0c2NoZWR1bGVyKGxvbmcgcGlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0c2NoZWR1bGVyKGxvbmcgcmVzLCBsb25nIHBpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0cGFyYW0obG9uZyBwaWQsIGxvbmcgcGFyYW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRwYXJhbShsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGFyYW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3NldGFmZmluaXR5KGxvbmcgcGlkLCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVzZXJfbWFza19wdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9zZXRhZmZpbml0eShsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVzZXJfbWFza19wdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX2dldGFmZmluaXR5KGxvbmcgcGlkLCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVzZXJfbWFza19wdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zY2hlZF9nZXRhZmZpbml0eShsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHVzZXJfbWFza19wdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3lpZWxkKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3lpZWxkKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4KGxvbmcgcG9saWN5KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChsb25nIHJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvbGljeSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihsb25nIHBvbGljeSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX2dldF9wcmlvcml0eV9taW4obG9uZyByZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb2xpY3kpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NjaGVkX3JyX2dldF9pbnRlcnZhbChsb25nIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NjaGVkX3JyX2dldF9pbnRlcnZhbChsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGludGVydmFsKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRwcmlvcml0eShsb25nIHdoaWNoLCBsb25nIHdobywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5pY2V2YWwpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRwcmlvcml0eShsb25nIHJlcywgbG9uZyB3aGljaCwgbG9uZyB3aG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmljZXZhbCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cHJpb3JpdHkobG9uZyB3aGljaCwgbG9uZyB3aG8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRwcmlvcml0eShsb25nIHJlcywgbG9uZyB3aGljaCwgbG9uZyB3aG8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NodXRkb3duKGxvbmcgYXJnMCwgbG9uZyBhcmcxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2h1dGRvd24obG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWJvb3QobG9uZyBtYWdpYzEsIGxvbmcgbWFnaWMyLCBsb25nIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWJvb3QobG9uZyByZXMsIGxvbmcgbWFnaWMxLCBsb25nIG1hZ2ljMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY21kLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVzdGFydF9zeXNjYWxsKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Jlc3RhcnRfc3lzY2FsbChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfa2V4ZWNfbG9hZChsb25nIGVudHJ5LCBsb25nIG5yX3NlZ21lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZWdtZW50cywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2tleGVjX2xvYWQobG9uZyByZXMsIGxvbmcgZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBucl9zZWdtZW50cywgbG9uZyBzZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9leGl0KGxvbmcgZXJyb3JfY29kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2V4aXQobG9uZyByZXMsIGxvbmcgZXJyb3JfY29kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXhpdF9ncm91cChsb25nIGVycm9yX2NvZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9leGl0X2dyb3VwKGxvbmcgcmVzLCBsb25nIGVycm9yX2NvZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXQ0KGxvbmcgcGlkLCBsb25nIHN0YXRfYWRkciwgbG9uZyBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcnUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93YWl0NChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgc3RhdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdGlvbnMsIGxvbmcgcnUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dhaXRpZChsb25nIHdoaWNoLCBsb25nIHBpZCwgbG9uZyBpbmZvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRpb25zLCBsb25nIHJ1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd2FpdGlkKGxvbmcgcmVzLCBsb25nIHdoaWNoLCBsb25nIHBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW5mb3AsIGxvbmcgb3B0aW9ucywgbG9uZyBydSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfd2FpdHBpZChsb25nIHBpZCwgbG9uZyBzdGF0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdGlvbnMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF93YWl0cGlkKGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyBzdGF0X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRpb25zKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRfdGlkX2FkZHJlc3MobG9uZyB0aWRwdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRfdGlkX2FkZHJlc3MobG9uZyByZXMsIGxvbmcgdGlkcHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pbml0X21vZHVsZShsb25nIHVtb2QsIGxvbmcgbGVuLCBsb25nIHVhcmdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW5pdF9tb2R1bGUobG9uZyByZXMsIGxvbmcgdW1vZCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWFyZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2RlbGV0ZV9tb2R1bGUobG9uZyBuYW1lX3VzZXIsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9kZWxldGVfbW9kdWxlKGxvbmcgcmVzLCBsb25nIG5hbWVfdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF9zaWdwcm9jbWFzayhsb25nIGhvdywgbG9uZyBzZXQsIGxvbmcgb3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZ3NldHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWdwcm9jbWFzayhsb25nIHJlcywgbG9uZyBob3csIGxvbmcgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9zZXQsIGxvbmcgc2lnc2V0c2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncGVuZGluZyhsb25nIHNldCwgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcnRfc2lncGVuZGluZyhsb25nIHJlcywgbG9uZyBzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9ydF9zaWd0aW1lZHdhaXQobG9uZyB1dGhlc2UsIGxvbmcgdWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXRzLCBsb25nIHNpZ3NldHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF9zaWd0aW1lZHdhaXQobG9uZyByZXMsIGxvbmcgdXRoZXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1aW5mbywgbG9uZyB1dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZ3NldHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3J0X3Rnc2lncXVldWVpbmZvKGxvbmcgdGdpZCwgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaWcsIGxvbmcgdWluZm8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ydF90Z3NpZ3F1ZXVlaW5mbyhsb25nIHJlcywgbG9uZyB0Z2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBpZCwgbG9uZyBzaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdWluZm8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2tpbGwobG9uZyBwaWQsIGxvbmcgc2lnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfa2lsbChsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgc2lnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90Z2tpbGwobG9uZyB0Z2lkLCBsb25nIHBpZCwgbG9uZyBzaWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90Z2tpbGwobG9uZyByZXMsIGxvbmcgdGdpZCwgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGtpbGwobG9uZyBwaWQsIGxvbmcgc2lnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdGtpbGwobG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIHNpZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcnRfc2lncXVldWVpbmZvKGxvbmcgcGlkLCBsb25nIHNpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1aW5mbyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3J0X3NpZ3F1ZXVlaW5mbyhsb25nIHJlcywgbG9uZyBwaWQsIGxvbmcgc2lnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1aW5mbyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2dldG1hc2soKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2dldG1hc2sobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NzZXRtYXNrKGxvbmcgbmV3bWFzayk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NzZXRtYXNrKGxvbmcgcmVzLCBsb25nIG5ld21hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ25hbChsb25nIHNpZywgbG9uZyBoYW5kbGVyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2lnbmFsKGxvbmcgcmVzLCBsb25nIHNpZywgbG9uZyBoYW5kbGVyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wYXVzZSgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wYXVzZShsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3luYygpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW5jKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3luYyhsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN5bmMobG9uZyByZXMsIGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZkYXRhc3luYyhsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmRhdGFzeW5jKGxvbmcgcmVzLCBsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9iZGZsdXNoKGxvbmcgZnVuYywgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYmRmbHVzaChsb25nIHJlcywgbG9uZyBmdW5jLCBsb25nIGRhdGEpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21vdW50KGxvbmcgZGV2X25hbWUsIGxvbmcgZGlyX25hbWUsIGxvbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIGRhdGEpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tb3VudChsb25nIHJlcywgbG9uZyBkZXZfbmFtZSwgbG9uZyBkaXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0eXBlLCBsb25nIGZsYWdzLCBsb25nIGRhdGEpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Vtb3VudChsb25nIG5hbWUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bW91bnQobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkdW1vdW50KGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZHVtb3VudChsb25nIHJlcywgbG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90cnVuY2F0ZShsb25nIHBhdGgsIGxvbmcgbGVuZ3RoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdHJ1bmNhdGUobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBsZW5ndGgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Z0cnVuY2F0ZShsb25nIGZkLCBsb25nIGxlbmd0aCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Z0cnVuY2F0ZShsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBsZW5ndGgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXQobG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3RhdChsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zdGF0ZnMobG9uZyBwYXRoLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXRmcyhsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3RhdGZzNjQobG9uZyBwYXRoLCBsb25nIHN6LCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N0YXRmczY0KGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgc3osCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdGZzKGxvbmcgZmQsIGxvbmcgYnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXRmcyhsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0ZnM2NChsb25nIGZkLCBsb25nIHN6LCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZzdGF0ZnM2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc3RhdChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc3RhdChsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdChsb25nIGZkLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc3RhdChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdzdGF0KGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld3N0YXQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdsc3RhdChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdsc3RhdChsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9uZXdmc3RhdChsb25nIGZkLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9uZXdmc3RhdChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91c3RhdChsb25nIGRldiwgbG9uZyB1YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXN0YXQobG9uZyByZXMsIGxvbmcgZGV2LCBsb25nIHVidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N0YXQ2NChsb25nIGZpbGVuYW1lLCBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zdGF0NjQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZzdGF0NjQobG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXQ2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc3RhdDY0KGxvbmcgZmlsZW5hbWUsIGxvbmcgc3RhdGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xzdGF0NjQobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0YnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR4YXR0cihsb25nIHBhdGgsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXR4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbHNldHhhdHRyKGxvbmcgcGF0aCwgbG9uZyBuYW1lLCBsb25nIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc2V0eGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSwgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc2V0eGF0dHIobG9uZyBmZCwgbG9uZyBuYW1lLCBsb25nIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mc2V0eGF0dHIobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0eGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUsIGxvbmcgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0eGF0dHIobG9uZyByZXMsIGxvbmcgcGF0aCwgbG9uZyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xnZXR4YXR0cihsb25nIHBhdGgsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGdldHhhdHRyKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUsIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmdldHhhdHRyKGxvbmcgZmQsIGxvbmcgbmFtZSwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmdldHhhdHRyKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlLCBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpc3R4YXR0cihsb25nIHBhdGgsIGxvbmcgbGlzdCwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlzdHhhdHRyKGxvbmcgcmVzLCBsb25nIHBhdGgsIGxvbmcgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbGxpc3R4YXR0cihsb25nIHBhdGgsIGxvbmcgbGlzdCwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGxpc3R4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mbGlzdHhhdHRyKGxvbmcgZmQsIGxvbmcgbGlzdCwgbG9uZyBzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmxpc3R4YXR0cihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVtb3ZleGF0dHIobG9uZyBwYXRoLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW1vdmV4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xyZW1vdmV4YXR0cihsb25nIHBhdGgsIGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2xyZW1vdmV4YXR0cihsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZyZW1vdmV4YXR0cihsb25nIGZkLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mcmVtb3ZleGF0dHIobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYnJrKGxvbmcgYnJrKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfYnJrKGxvbmcgcmVzLCBsb25nIGJyayk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXByb3RlY3QobG9uZyBzdGFydCwgbG9uZyBsZW4sIGxvbmcgcHJvdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21wcm90ZWN0KGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwcm90KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcmVtYXAobG9uZyBhZGRyLCBsb25nIG9sZF9sZW4sIGxvbmcgbmV3X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBuZXdfYWRkcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21yZW1hcChsb25nIHJlcywgbG9uZyBhZGRyLCBsb25nIG9sZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19sZW4sIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19hZGRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW1hcF9maWxlX3BhZ2VzKGxvbmcgc3RhcnQsIGxvbmcgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHJvdCwgbG9uZyBwZ29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW1hcF9maWxlX3BhZ2VzKGxvbmcgcmVzLCBsb25nIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSwgbG9uZyBwcm90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGdvZmYsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zeW5jKGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXN5bmMobG9uZyByZXMsIGxvbmcgc3RhcnQsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5tYXAobG9uZyBhZGRyLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX211bm1hcChsb25nIHJlcywgbG9uZyBhZGRyLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWxvY2sobG9uZyBzdGFydCwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbG9jayhsb25nIHJlcywgbG9uZyBzdGFydCwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX211bmxvY2sobG9uZyBzdGFydCwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tdW5sb2NrKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWxvY2thbGwobG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21sb2NrYWxsKGxvbmcgcmVzLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tdW5sb2NrYWxsKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX211bmxvY2thbGwobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21hZHZpc2UobG9uZyBzdGFydCwgbG9uZyBsZW4sIGxvbmcgYmVoYXZpb3IpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tYWR2aXNlKGxvbmcgcmVzLCBsb25nIHN0YXJ0LCBsb25nIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJlaGF2aW9yKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9taW5jb3JlKGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIHZlYyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21pbmNvcmUobG9uZyByZXMsIGxvbmcgc3RhcnQsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmVjKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9waXZvdF9yb290KGxvbmcgbmV3X3Jvb3QsIGxvbmcgcHV0X29sZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Bpdm90X3Jvb3QobG9uZyByZXMsIGxvbmcgbmV3X3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwdXRfb2xkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaHJvb3QobG9uZyBmaWxlbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nocm9vdChsb25nIHJlcywgbG9uZyBmaWxlbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWtub2QobG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlLCBsb25nIGRldik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rbm9kKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV2KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saW5rKGxvbmcgb2xkbmFtZSwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGluayhsb25nIHJlcywgbG9uZyBvbGRuYW1lLCBsb25nIG5ld25hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bWxpbmsobG9uZyBvbGQsIGxvbmcgbmV3Xyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5bWxpbmsobG9uZyByZXMsIGxvbmcgb2xkLCBsb25nIG5ld18pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VubGluayhsb25nIHBhdGhuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5saW5rKGxvbmcgcmVzLCBsb25nIHBhdGhuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZW5hbWUobG9uZyBvbGRuYW1lLCBsb25nIG5ld25hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZW5hbWUobG9uZyByZXMsIGxvbmcgb2xkbmFtZSwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9jaG1vZChsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaG1vZChsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mY2htb2QobG9uZyBmZCwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNobW9kKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjbnRsKGxvbmcgZmQsIGxvbmcgY21kLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZjbnRsKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGNtZCwgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjbnRsNjQobG9uZyBmZCwgbG9uZyBjbWQsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNudGw2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BpcGUobG9uZyBmaWxkZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXBlKGxvbmcgcmVzLCBsb25nIGZpbGRlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGlwZTIobG9uZyBmaWxkZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9waXBlMihsb25nIHJlcywgbG9uZyBmaWxkZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2R1cChsb25nIGZpbGRlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2R1cChsb25nIHJlcywgbG9uZyBmaWxkZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2R1cDIobG9uZyBvbGRmZCwgbG9uZyBuZXdmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2R1cDIobG9uZyByZXMsIGxvbmcgb2xkZmQsIGxvbmcgbmV3ZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2R1cDMobG9uZyBvbGRmZCwgbG9uZyBuZXdmZCwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2R1cDMobG9uZyByZXMsIGxvbmcgb2xkZmQsIGxvbmcgbmV3ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9wZXJtKGxvbmcgZnJvbSwgbG9uZyBudW0sIGxvbmcgb24pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb3Blcm0obG9uZyByZXMsIGxvbmcgZnJvbSwgbG9uZyBudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9uKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb2N0bChsb25nIGZkLCBsb25nIGNtZCwgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb2N0bChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBjbWQsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mbG9jayhsb25nIGZkLCBsb25nIGNtZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Zsb2NrKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGNtZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaW9fc2V0dXAobG9uZyBucl9yZXFzLCBsb25nIGN0eCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvX3NldHVwKGxvbmcgcmVzLCBsb25nIG5yX3JlcXMsIGxvbmcgY3R4KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19kZXN0cm95KGxvbmcgY3R4KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fZGVzdHJveShsb25nIHJlcywgbG9uZyBjdHgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lvX2dldGV2ZW50cyhsb25nIGN0eF9pZCwgbG9uZyBtaW5fbnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbnIsIGxvbmcgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19nZXRldmVudHMobG9uZyByZXMsIGxvbmcgY3R4X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtaW5fbnIsIGxvbmcgbnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGV2ZW50cywgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19zdWJtaXQobG9uZyBjdHhfaWQsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9fc3VibWl0KGxvbmcgcmVzLCBsb25nIGN0eF9pZCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb19jYW5jZWwobG9uZyBjdHhfaWQsIGxvbmcgaW9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByZXN1bHQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pb19jYW5jZWwobG9uZyByZXMsIGxvbmcgY3R4X2lkLCBsb25nIGlvY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJlc3VsdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZGZpbGUobG9uZyBvdXRfZmQsIGxvbmcgaW5fZmQsIGxvbmcgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kZmlsZShsb25nIHJlcywgbG9uZyBvdXRfZmQsIGxvbmcgaW5fZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2Zmc2V0LCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kZmlsZTY0KGxvbmcgb3V0X2ZkLCBsb25nIGluX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmZzZXQsIGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW5kZmlsZTY0KGxvbmcgcmVzLCBsb25nIG91dF9mZCwgbG9uZyBpbl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZnNldCwgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVhZGxpbmsobG9uZyBwYXRoLCBsb25nIGJ1ZiwgbG9uZyBidWZzaXopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkbGluayhsb25nIHJlcywgbG9uZyBwYXRoLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWZzaXopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NyZWF0KGxvbmcgcGF0aG5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2NyZWF0KGxvbmcgcmVzLCBsb25nIHBhdGhuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX29wZW4obG9uZyBmaWxlbmFtZSwgbG9uZyBmbGFncywgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb3Blbihsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nsb3NlKGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jbG9zZShsb25nIHJlcywgbG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXNzKGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2FjY2Vzcyhsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF92aGFuZ3VwKCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3ZoYW5ndXAobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nob3duKGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nob3duKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xjaG93bihsb25nIGZpbGVuYW1lLCBsb25nIHVzZXIsIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sY2hvd24obG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG93bihsb25nIGZkLCBsb25nIHVzZXIsIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hvd24obG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nob3duMTYobG9uZyBmaWxlbmFtZSwgbG9uZyB1c2VyLCBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfY2hvd24xNihsb25nIHJlcywgbG9uZyBmaWxlbmFtZSwgbG9uZyB1c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXApOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xjaG93bjE2KGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGNob3duMTYobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNob3duMTYobG9uZyBmZCwgbG9uZyB1c2VyLCBsb25nIGdyb3VwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZmNob3duMTYobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVnaWQxNihsb25nIHJnaWQsIGxvbmcgZWdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlZ2lkMTYobG9uZyByZXMsIGxvbmcgcmdpZCwgbG9uZyBlZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRnaWQxNihsb25nIGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldGdpZDE2KGxvbmcgcmVzLCBsb25nIGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmV1aWQxNihsb25nIHJ1aWQsIGxvbmcgZXVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJldWlkMTYobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXR1aWQxNihsb25nIHVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHVpZDE2KGxvbmcgcmVzLCBsb25nIHVpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmVzdWlkMTYobG9uZyBydWlkLCBsb25nIGV1aWQsIGxvbmcgc3VpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJlc3VpZDE2KGxvbmcgcmVzLCBsb25nIHJ1aWQsIGxvbmcgZXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRyZXN1aWQxNihsb25nIHJ1aWQsIGxvbmcgZXVpZCwgbG9uZyBzdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cmVzdWlkMTYobG9uZyByZXMsIGxvbmcgcnVpZCwgbG9uZyBldWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldHJlc2dpZDE2KGxvbmcgcmdpZCwgbG9uZyBlZ2lkLCBsb25nIHNnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRyZXNnaWQxNihsb25nIHJlcywgbG9uZyByZ2lkLCBsb25nIGVnaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmVzZ2lkMTYobG9uZyByZ2lkLCBsb25nIGVnaWQsIGxvbmcgc2dpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJlc2dpZDE2KGxvbmcgcmVzLCBsb25nIHJnaWQsIGxvbmcgZWdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRmc3VpZDE2KGxvbmcgdWlkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZnN1aWQxNihsb25nIHJlcywgbG9uZyB1aWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGZzZ2lkMTYobG9uZyBnaWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRmc2dpZDE2KGxvbmcgcmVzLCBsb25nIGdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Z3JvdXBzMTYobG9uZyBnaWRzZXRzaXplLCBsb25nIGdyb3VwbGlzdCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGdyb3VwczE2KGxvbmcgcmVzLCBsb25nIGdpZHNldHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZ3JvdXBsaXN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZXRncm91cHMxNihsb25nIGdpZHNldHNpemUsIGxvbmcgZ3JvdXBsaXN0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0Z3JvdXBzMTYobG9uZyByZXMsIGxvbmcgZ2lkc2V0c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBncm91cGxpc3QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHVpZDE2KCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHVpZDE2KGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRldWlkMTYoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZXVpZDE2KGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRnaWQxNigpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRnaWQxNihsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0ZWdpZDE2KCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldGVnaWQxNihsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWUobG9uZyBmaWxlbmFtZSwgbG9uZyB0aW1lcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3V0aW1lKGxvbmcgcmVzLCBsb25nIGZpbGVuYW1lLCBsb25nIHRpbWVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91dGltZXMobG9uZyBmaWxlbmFtZSwgbG9uZyB1dGltZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91dGltZXMobG9uZyByZXMsIGxvbmcgZmlsZW5hbWUsIGxvbmcgdXRpbWVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sc2Vlayhsb25nIGZkLCBsb25nIG9mZnNldCwgbG9uZyBvcmlnaW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sc2Vlayhsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3JpZ2luKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9sbHNlZWsobG9uZyBmZCwgbG9uZyBvZmZzZXRfaGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmZzZXRfbG93LCBsb25nIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcmlnaW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sbHNlZWsobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgb2Zmc2V0X2hpZ2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9mZnNldF9sb3csIGxvbmcgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcmlnaW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlYWQobG9uZyBmZCwgbG9uZyBidWYsIGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkdihsb25nIGZkLCBsb25nIHZlYywgbG9uZyB2bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVhZHYobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3dyaXRlKGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfd3JpdGUobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF93cml0ZXYobG9uZyBmZCwgbG9uZyB2ZWMsIGxvbmcgdmxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3dyaXRldihsb25nIHJlcywgbG9uZyBmZCwgbG9uZyB2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4pOworCisjaWZkZWYgX0xQNjQKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wcmVhZDY0KGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcmVhZDY0KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50LCBsb25nIHBvcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHdyaXRlNjQobG9uZyBmZCwgbG9uZyBidWYsIGxvbmcgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wd3JpdGU2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY291bnQsIGxvbmcgcG9zKTsKKyNlbHNlCit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJlYWQ2NChsb25nIGZkLCBsb25nIGJ1ZiwgbG9uZyBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zMCwgbG9uZyBwb3MxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWQ2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCwgbG9uZyBwb3MwLCBsb25nIHBvczEpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3B3cml0ZTY0KGxvbmcgZmQsIGxvbmcgYnVmLCBsb25nIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcG9zMCwgbG9uZyBwb3MxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHdyaXRlNjQobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50LCBsb25nIHBvczAsIGxvbmcgcG9zMSk7CisjZW5kaWYKKwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3ByZWFkdihsb25nIGZkLCBsb25nIHZlYywgbG9uZyB2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBvc19sLCBsb25nIHBvc19oKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJlYWR2KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmxlbiwgbG9uZyBwb3NfbCwgbG9uZyBwb3NfaCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHdyaXRldihsb25nIGZkLCBsb25nIHZlYywgbG9uZyB2bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwb3NfbCwgbG9uZyBwb3NfaCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3B3cml0ZXYobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdmxlbiwgbG9uZyBwb3NfbCwgbG9uZyBwb3NfaCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Y3dkKGxvbmcgYnVmLCBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRjd2QobG9uZyByZXMsIGxvbmcgYnVmLCBsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rZGlyKGxvbmcgcGF0aG5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21rZGlyKGxvbmcgcmVzLCBsb25nIHBhdGhuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2NoZGlyKGxvbmcgZmlsZW5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9jaGRpcihsb25nIHJlcywgbG9uZyBmaWxlbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNoZGlyKGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hkaXIobG9uZyByZXMsIGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JtZGlyKGxvbmcgcGF0aG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ybWRpcihsb25nIHJlcywgbG9uZyBwYXRobmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbG9va3VwX2Rjb29raWUobG9uZyBjb29raWU2NCwgbG9uZyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9sb29rdXBfZGNvb2tpZShsb25nIHJlcywgbG9uZyBjb29raWU2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWYsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9xdW90YWN0bChsb25nIGNtZCwgbG9uZyBzcGVjaWFsLCBsb25nIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWRkcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3F1b3RhY3RsKGxvbmcgcmVzLCBsb25nIGNtZCwgbG9uZyBzcGVjaWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlkLCBsb25nIGFkZHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldGRlbnRzKGxvbmcgZmQsIGxvbmcgZGlyZW50LCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZGVudHMobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgZGlyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRkZW50czY0KGxvbmcgZmQsIGxvbmcgZGlyZW50LCBsb25nIGNvdW50KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0ZGVudHM2NChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBkaXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0c29ja29wdChsb25nIGZkLCBsb25nIGxldmVsLCBsb25nIG9wdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdHZhbCwgbG9uZyBvcHRsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRzb2Nrb3B0KGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0bmFtZSwgbG9uZyBvcHR2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHRsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHNvY2tvcHQobG9uZyBmZCwgbG9uZyBsZXZlbCwgbG9uZyBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvcHR2YWwsIGxvbmcgb3B0bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0c29ja29wdChsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG9wdG5hbWUsIGxvbmcgb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb3B0bGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9iaW5kKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9iaW5kKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Nvbm5lY3QobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Nvbm5lY3QobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfYWNjZXB0KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2NlcHQobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9hY2NlcHQ0KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hY2NlcHQ0KGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0c29ja25hbWUobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHNvY2tuYW1lKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRwZWVybmFtZShsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0cGVlcm5hbWUobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbmQobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmQobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMiwgbG9uZyBhcmczKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kdG8obG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmczLCBsb25nIGFyZzQsIGxvbmcgYXJnNSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbmR0byhsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMywgbG9uZyBhcmc0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmc1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW5kbXNnKGxvbmcgZmQsIGxvbmcgbXNnLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZG1zZyhsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VuZG1tc2cobG9uZyBmZCwgbG9uZyBtc2csIGxvbmcgdmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2VuZG1tc2cobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4sIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3YobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3YobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMiwgbG9uZyBhcmczKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWN2ZnJvbShsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMywgbG9uZyBhcmc0LCBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWN2ZnJvbShsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMiwgbG9uZyBhcmczLCBsb25nIGFyZzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcmVjdm1zZyhsb25nIGZkLCBsb25nIG1zZywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlY3Ztc2cobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlY3ZtbXNnKGxvbmcgZmQsIGxvbmcgbXNnLCBsb25nIHZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVjdm1tc2cobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHZsZW4sIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc29ja2V0KGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXQobG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zb2NrZXRwYWlyKGxvbmcgYXJnMCwgbG9uZyBhcmcxLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zb2NrZXRwYWlyKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIsIGxvbmcgYXJnMyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc29ja2V0Y2FsbChsb25nIGNhbGwsIGxvbmcgYXJncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NvY2tldGNhbGwobG9uZyByZXMsIGxvbmcgY2FsbCwgbG9uZyBhcmdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9saXN0ZW4obG9uZyBhcmcwLCBsb25nIGFyZzEpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9saXN0ZW4obG9uZyByZXMsIGxvbmcgYXJnMCwgbG9uZyBhcmcxKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wb2xsKGxvbmcgdWZkcywgbG9uZyBuZmRzLCBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wb2xsKGxvbmcgcmVzLCBsb25nIHVmZHMsIGxvbmcgbmZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NlbGVjdChsb25nIG4sIGxvbmcgaW5wLCBsb25nIG91dHAsIGxvbmcgZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHR2cCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbGVjdChsb25nIHJlcywgbG9uZyBuLCBsb25nIGlucCwgbG9uZyBvdXRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBleHAsIGxvbmcgdHZwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfc2VsZWN0KGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkX3NlbGVjdChsb25nIHJlcywgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2Vwb2xsX2NyZWF0ZShsb25nIHNpemUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9lcG9sbF9jcmVhdGUobG9uZyByZXMsIGxvbmcgc2l6ZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfY3JlYXRlMShsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfY3JlYXRlMShsb25nIHJlcywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfY3RsKGxvbmcgZXBmZCwgbG9uZyBvcCwgbG9uZyBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBldmVudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX2N0bChsb25nIHJlcywgbG9uZyBlcGZkLCBsb25nIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmZCwgbG9uZyBldmVudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfd2FpdChsb25nIGVwZmQsIGxvbmcgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXhldmVudHMsIGxvbmcgdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Vwb2xsX3dhaXQobG9uZyByZXMsIGxvbmcgZXBmZCwgbG9uZyBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXhldmVudHMsIGxvbmcgdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZXBvbGxfcHdhaXQobG9uZyBlcGZkLCBsb25nIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1heGV2ZW50cywgbG9uZyB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2lnbWFzaywgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZXBvbGxfcHdhaXQobG9uZyByZXMsIGxvbmcgZXBmZCwgbG9uZyBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4ZXZlbnRzLCBsb25nIHRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2lnbWFzaywgbG9uZyBzaWdzZXRzaXplKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRob3N0bmFtZShsb25nIG5hbWUsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZ2V0aG9zdG5hbWUobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldGhvc3RuYW1lKGxvbmcgbmFtZSwgbG9uZyBsZW4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRob3N0bmFtZShsb25nIHJlcywgbG9uZyBuYW1lLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0ZG9tYWlubmFtZShsb25nIG5hbWUsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0ZG9tYWlubmFtZShsb25nIHJlcywgbG9uZyBuYW1lLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmV3dW5hbWUobG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmV3dW5hbWUobG9uZyByZXMsIGxvbmcgbmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5hbWUobG9uZyBhcmcwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5hbWUobG9uZyByZXMsIGxvbmcgYXJnMCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkdW5hbWUobG9uZyBhcmcwKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfb2xkdW5hbWUobG9uZyByZXMsIGxvbmcgYXJnMCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0cmxpbWl0KGxvbmcgcmVzb3VyY2UsIGxvbmcgcmxpbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJsaW1pdChsb25nIHJlcywgbG9uZyByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmxpbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX2dldHJsaW1pdChsb25nIHJlc291cmNlLCBsb25nIHJsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vbGRfZ2V0cmxpbWl0KGxvbmcgcmVzLCBsb25nIHJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmxpbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0cmxpbWl0KGxvbmcgcmVzb3VyY2UsIGxvbmcgcmxpbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NldHJsaW1pdChsb25nIHJlcywgbG9uZyByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmxpbSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJsaW1pdDY0KGxvbmcgcGlkLCBsb25nIHJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld19ybGltLCBsb25nIG9sZF9ybGltKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJsaW1pdDY0KGxvbmcgcmVzLCBsb25nIHBpZCwgbG9uZyByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3X3JsaW0sIGxvbmcgb2xkX3JsaW0pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2dldHJ1c2FnZShsb25nIHdobywgbG9uZyBydSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldHJ1c2FnZShsb25nIHJlcywgbG9uZyB3aG8sIGxvbmcgcnUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3VtYXNrKGxvbmcgbWFzayk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3VtYXNrKGxvbmcgcmVzLCBsb25nIG1hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21zZ2dldChsb25nIGtleSwgbG9uZyBtc2dmbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2dnZXQobG9uZyByZXMsIGxvbmcga2V5LCBsb25nIG1zZ2ZsZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNnc25kKGxvbmcgbXNxaWQsIGxvbmcgbXNncCwgbG9uZyBtc2dzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtc2dmbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2dzbmQobG9uZyByZXMsIGxvbmcgbXNxaWQsIGxvbmcgbXNncCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnc3osIGxvbmcgbXNnZmxnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tc2dyY3YobG9uZyBtc3FpZCwgbG9uZyBtc2dwLCBsb25nIG1zZ3N6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1zZ3R5cCwgbG9uZyBtc2dmbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tc2dyY3YobG9uZyByZXMsIGxvbmcgbXNxaWQsIGxvbmcgbXNncCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnc3osIGxvbmcgbXNndHlwLCBsb25nIG1zZ2ZsZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbXNnY3RsKGxvbmcgbXNxaWQsIGxvbmcgY21kLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21zZ2N0bChsb25nIHJlcywgbG9uZyBtc3FpZCwgbG9uZyBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtZ2V0KGxvbmcga2V5LCBsb25nIG5zZW1zLCBsb25nIHNlbWZsZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbWdldChsb25nIHJlcywgbG9uZyBrZXksIGxvbmcgbnNlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNlbWZsZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2Vtb3AobG9uZyBzZW1pZCwgbG9uZyBzb3BzLCBsb25nIG5zb3BzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2Vtb3AobG9uZyByZXMsIGxvbmcgc2VtaWQsIGxvbmcgc29wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuc29wcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2VtY3RsKGxvbmcgc2VtaWQsIGxvbmcgc2VtbnVtLCBsb25nIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZW1jdGwobG9uZyByZXMsIGxvbmcgc2VtaWQsIGxvbmcgc2VtbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBjbWQsIGxvbmcgYXJnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zZW10aW1lZG9wKGxvbmcgc2VtaWQsIGxvbmcgc29wcywgbG9uZyBuc29wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NlbXRpbWVkb3AobG9uZyByZXMsIGxvbmcgc2VtaWQsIGxvbmcgc29wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5zb3BzLCBsb25nIHRpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NobWF0KGxvbmcgc2htaWQsIGxvbmcgc2htYWRkciwgbG9uZyBzaG1mbGcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaG1hdChsb25nIHJlcywgbG9uZyBzaG1pZCwgbG9uZyBzaG1hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNobWZsZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2htZ2V0KGxvbmcga2V5LCBsb25nIHNpemUsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWdldChsb25nIHJlcywgbG9uZyBrZXksIGxvbmcgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2htZHQobG9uZyBzaG1hZGRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2htZHQobG9uZyByZXMsIGxvbmcgc2htYWRkcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2htY3RsKGxvbmcgc2htaWQsIGxvbmcgY21kLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NobWN0bChsb25nIHJlcywgbG9uZyBzaG1pZCwgbG9uZyBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfaXBjKGxvbmcgY2FsbCwgbG9uZyBmaXJzdCwgbG9uZyBzZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGhpcmQsIGxvbmcgcHRyLCBsb25nIGZpZnRoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaXBjKGxvbmcgcmVzLCBsb25nIGNhbGwsIGxvbmcgZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNlY29uZCwgbG9uZyB0aGlyZCwgbG9uZyBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZpZnRoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV9vcGVuKGxvbmcgbmFtZSwgbG9uZyBvZmxhZywgbG9uZyBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhdHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfb3Blbihsb25nIHJlcywgbG9uZyBuYW1lLCBsb25nIG9mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSwgbG9uZyBhdHRyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV91bmxpbmsobG9uZyBuYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfdW5saW5rKGxvbmcgcmVzLCBsb25nIG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX3RpbWVkc2VuZChsb25nIG1xZGVzLCBsb25nIG1zZ19wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX2xlbiwgbG9uZyBtc2dfcHJpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhYnNfdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3RpbWVkc2VuZChsb25nIHJlcywgbG9uZyBtcWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX3B0ciwgbG9uZyBtc2dfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtc2dfcHJpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWJzX3RpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX3RpbWVkcmVjZWl2ZShsb25nIG1xZGVzLCBsb25nIG1zZ19wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX2xlbiwgbG9uZyBtc2dfcHJpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhYnNfdGltZW91dCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX3RpbWVkcmVjZWl2ZShsb25nIHJlcywgbG9uZyBtcWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbXNnX3B0ciwgbG9uZyBtc2dfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtc2dfcHJpbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYWJzX3RpbWVvdXQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21xX25vdGlmeShsb25nIG1xZGVzLCBsb25nIG5vdGlmaWNhdGlvbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21xX25vdGlmeShsb25nIHJlcywgbG9uZyBtcWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbm90aWZpY2F0aW9uKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tcV9nZXRzZXRhdHRyKGxvbmcgbXFkZXMsIGxvbmcgbXFzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvbXFzdGF0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbXFfZ2V0c2V0YXR0cihsb25nIHJlcywgbG9uZyBtcWRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1xc3RhdCwgbG9uZyBvbXFzdGF0KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wY2ljb25maWdfaW9iYXNlKGxvbmcgd2hpY2gsIGxvbmcgYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXZmbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ19pb2Jhc2UobG9uZyByZXMsIGxvbmcgd2hpY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidXMsIGxvbmcgZGV2Zm4pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3BjaWNvbmZpZ19yZWFkKGxvbmcgYnVzLCBsb25nIGRmbiwgbG9uZyBvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW4sIGxvbmcgYnVmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcGNpY29uZmlnX3JlYWQobG9uZyByZXMsIGxvbmcgYnVzLCBsb25nIGRmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmYsIGxvbmcgbGVuLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcGNpY29uZmlnX3dyaXRlKGxvbmcgYnVzLCBsb25nIGRmbiwgbG9uZyBvZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuLCBsb25nIGJ1Zik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BjaWNvbmZpZ193cml0ZShsb25nIHJlcywgbG9uZyBidXMsIGxvbmcgZGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvZmYsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N3YXBvbihsb25nIHNwZWNpYWxmaWxlLCBsb25nIHN3YXBfZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zd2Fwb24obG9uZyByZXMsIGxvbmcgc3BlY2lhbGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN3YXBfZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N3YXBvZmYobG9uZyBzcGVjaWFsZmlsZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N3YXBvZmYobG9uZyByZXMsIGxvbmcgc3BlY2lhbGZpbGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2N0bChsb25nIGFyZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNjdGwobG9uZyByZXMsIGxvbmcgYXJncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc3lzaW5mbyhsb25nIGluZm8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeXNpbmZvKGxvbmcgcmVzLCBsb25nIGluZm8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2ZzKGxvbmcgb3B0aW9uLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5c2ZzKGxvbmcgcmVzLCBsb25nIG9wdGlvbiwgbG9uZyBhcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5c2xvZyhsb25nIHR5cGUsIGxvbmcgYnVmLCBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3N5c2xvZyhsb25nIHJlcywgbG9uZyB0eXBlLCBsb25nIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91c2VsaWIobG9uZyBsaWJyYXJ5KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdXNlbGliKGxvbmcgcmVzLCBsb25nIGxpYnJhcnkpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25pX3N5c2NhbGwoKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmlfc3lzY2FsbChsb25nIHJlcyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHRyYWNlKGxvbmcgcmVxdWVzdCwgbG9uZyBwaWQsIGxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHRyYWNlKGxvbmcgcmVzLCBsb25nIHJlcXVlc3QsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhZGRyLCBsb25nIGRhdGEpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2FkZF9rZXkobG9uZyBfdHlwZSwgbG9uZyBfZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9wYXlsb2FkLCBsb25nIHBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRlc3RyaW5naWQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9hZGRfa2V5KGxvbmcgcmVzLCBsb25nIF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX2Rlc2NyaXB0aW9uLCBsb25nIF9wYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGxlbiwgbG9uZyBkZXN0cmluZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZXF1ZXN0X2tleShsb25nIF90eXBlLCBsb25nIF9kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9jYWxsb3V0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXN0cmluZ2lkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcmVxdWVzdF9rZXkobG9uZyByZXMsIGxvbmcgX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX2Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9jYWxsb3V0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGVzdHJpbmdpZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfa2V5Y3RsKGxvbmcgY21kLCBsb25nIGFyZzIsIGxvbmcgYXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmc0LCBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9rZXljdGwobG9uZyByZXMsIGxvbmcgY21kLCBsb25nIGFyZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMsIGxvbmcgYXJnNCwgbG9uZyBhcmc1KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb3ByaW9fc2V0KGxvbmcgd2hpY2gsIGxvbmcgd2hvLCBsb25nIGlvcHJpbyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lvcHJpb19zZXQobG9uZyByZXMsIGxvbmcgd2hpY2gsIGxvbmcgd2hvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW9wcmlvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9pb3ByaW9fZ2V0KGxvbmcgd2hpY2gsIGxvbmcgd2hvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfaW9wcmlvX2dldChsb25nIHJlcywgbG9uZyB3aGljaCwgbG9uZyB3aG8pOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldF9tZW1wb2xpY3kobG9uZyBtb2RlLCBsb25nIG5tYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXhub2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X21lbXBvbGljeShsb25nIHJlcywgbG9uZyBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbm1hc2ssIGxvbmcgbWF4bm9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWlncmF0ZV9wYWdlcyhsb25nIHBpZCwgbG9uZyBtYXhub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmcm9tLCBsb25nIHRvKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWlncmF0ZV9wYWdlcyhsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXhub2RlLCBsb25nIGZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0byk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbW92ZV9wYWdlcyhsb25nIHBpZCwgbG9uZyBucl9wYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGFnZXMsIGxvbmcgbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXR1cywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX21vdmVfcGFnZXMobG9uZyByZXMsIGxvbmcgcGlkLCBsb25nIG5yX3BhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGFnZXMsIGxvbmcgbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdGF0dXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21iaW5kKGxvbmcgc3RhcnQsIGxvbmcgbGVuLCBsb25nIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBubWFzaywgbG9uZyBtYXhub2RlLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWJpbmQobG9uZyByZXMsIGxvbmcgc3RhcnQsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUsIGxvbmcgbm1hc2ssIGxvbmcgbWF4bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0X21lbXBvbGljeShsb25nIHBvbGljeSwgbG9uZyBubWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWF4bm9kZSwgbG9uZyBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldF9tZW1wb2xpY3kobG9uZyByZXMsIGxvbmcgcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbm1hc2ssIGxvbmcgbWF4bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFkZHIsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfaW5pdCgpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2luaXQobG9uZyByZXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfaW5pdDEobG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lub3RpZnlfaW5pdDEobG9uZyByZXMsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfYWRkX3dhdGNoKGxvbmcgZmQsIGxvbmcgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9pbm90aWZ5X2FkZF93YXRjaChsb25nIHJlcywgbG9uZyBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwYXRoLCBsb25nIG1hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2lub3RpZnlfcm1fd2F0Y2gobG9uZyBmZCwgbG9uZyB3ZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2lub3RpZnlfcm1fd2F0Y2gobG9uZyByZXMsIGxvbmcgZmQsIGxvbmcgd2QpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NwdV9ydW4obG9uZyBmZCwgbG9uZyB1bnBjLCBsb25nIHVzdGF0dXMpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcHVfcnVuKGxvbmcgcmVzLCBsb25nIGZkLCBsb25nIHVucGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c3RhdHVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zcHVfY3JlYXRlKGxvbmcgbmFtZSwgbG9uZyBmbGFncywgbG9uZyBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmZCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NwdV9jcmVhdGUobG9uZyByZXMsIGxvbmcgbmFtZSwgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUsIGxvbmcgZmQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX21rbm9kYXQobG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV2KTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtub2RhdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlLCBsb25nIGRldik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbWtkaXJhdChsb25nIGRmZCwgbG9uZyBwYXRobmFtZSwgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbWtkaXJhdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtb2RlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF91bmxpbmthdChsb25nIGRmZCwgbG9uZyBwYXRobmFtZSwgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfdW5saW5rYXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIHBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bWxpbmthdChsb25nIG9sZG5hbWUsIGxvbmcgbmV3ZGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld25hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zeW1saW5rYXQobG9uZyByZXMsIGxvbmcgb2xkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbmV3ZGZkLCBsb25nIG5ld25hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2xpbmthdChsb25nIG9sZGRmZCwgbG9uZyBvbGRuYW1lLCBsb25nIG5ld2RmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXduYW1lLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbGlua2F0KGxvbmcgcmVzLCBsb25nIG9sZGRmZCwgbG9uZyBvbGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdkZmQsIGxvbmcgbmV3bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3JlbmFtZWF0KGxvbmcgb2xkZGZkLCBsb25nIG9sZG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBuZXdkZmQsIGxvbmcgbmV3bmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3JlbmFtZWF0KGxvbmcgcmVzLCBsb25nIG9sZGRmZCwgbG9uZyBvbGRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5ld2RmZCwgbG9uZyBuZXduYW1lKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mdXRpbWVzYXQobG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXRpbWVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnV0aW1lc2F0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXRpbWVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mYWNjZXNzYXQobG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2ZhY2Nlc3NhdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2ZjaG1vZGF0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2htb2RhdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmNob3duYXQobG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsIGxvbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwLCBsb25nIGZsYWcpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mY2hvd25hdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXNlciwgbG9uZyBncm91cCwgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vcGVuYXQobG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsIGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbW9kZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29wZW5hdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLCBsb25nIG1vZGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX25ld2ZzdGF0YXQobG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHN0YXRidWYsIGxvbmcgZmxhZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX25ld2ZzdGF0YXQobG9uZyByZXMsIGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1ZiwgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9mc3RhdGF0NjQobG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1ZiwgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfZnN0YXRhdDY0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhdGJ1ZiwgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9yZWFkbGlua2F0KGxvbmcgZGZkLCBsb25nIHBhdGgsIGxvbmcgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBidWZzaXopOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9yZWFkbGlua2F0KGxvbmcgcmVzLCBsb25nIGRmZCwgbG9uZyBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYnVmLCBsb25nIGJ1ZnNpeik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdXRpbWVuc2F0KGxvbmcgZGZkLCBsb25nIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0aW1lcywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3V0aW1lbnNhdChsb25nIHJlcywgbG9uZyBkZmQsIGxvbmcgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHV0aW1lcywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdW5zaGFyZShsb25nIHVuc2hhcmVfZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF91bnNoYXJlKGxvbmcgcmVzLCBsb25nIHVuc2hhcmVfZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NwbGljZShsb25nIGZkX2luLCBsb25nIG9mZl9pbiwgbG9uZyBmZF9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgb2ZmX291dCwgbG9uZyBsZW4sIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zcGxpY2UobG9uZyByZXMsIGxvbmcgZmRfaW4sIGxvbmcgb2ZmX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmZF9vdXQsIGxvbmcgb2ZmX291dCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF92bXNwbGljZShsb25nIGZkLCBsb25nIGlvdiwgbG9uZyBucl9zZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92bXNwbGljZShsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBpb3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbnJfc2VncywgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfdGVlKGxvbmcgZmRpbiwgbG9uZyBmZG91dCwgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90ZWUobG9uZyByZXMsIGxvbmcgZmRpbiwgbG9uZyBmZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9nZXRfcm9idXN0X2xpc3QobG9uZyBwaWQsIGxvbmcgaGVhZF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGVuX3B0cik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2dldF9yb2J1c3RfbGlzdChsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGhlYWRfcHRyLCBsb25nIGxlbl9wdHIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NldF9yb2J1c3RfbGlzdChsb25nIGhlYWQsIGxvbmcgbGVuKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc2V0X3JvYnVzdF9saXN0KGxvbmcgcmVzLCBsb25nIGhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxlbik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZ2V0Y3B1KGxvbmcgY3B1LCBsb25nIG5vZGUsIGxvbmcgY2FjaGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9nZXRjcHUobG9uZyByZXMsIGxvbmcgY3B1LCBsb25nIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNhY2hlKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9zaWduYWxmZChsb25nIHVmZCwgbG9uZyB1c2VyX21hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplbWFzayk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3NpZ25hbGZkKGxvbmcgcmVzLCBsb25nIHVmZCwgbG9uZyB1c2VyX21hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZW1hc2spOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3NpZ25hbGZkNChsb25nIHVmZCwgbG9uZyB1c2VyX21hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZW1hc2ssIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zaWduYWxmZDQobG9uZyByZXMsIGxvbmcgdWZkLCBsb25nIHVzZXJfbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZW1hc2ssIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyZmRfY3JlYXRlKGxvbmcgY2xvY2tpZCwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyZmRfY3JlYXRlKGxvbmcgcmVzLCBsb25nIGNsb2NraWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3RpbWVyZmRfc2V0dGltZShsb25nIHVmZCwgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB1dG1yLCBsb25nIG90bXIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF90aW1lcmZkX3NldHRpbWUobG9uZyByZXMsIGxvbmcgdWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyB1dG1yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBvdG1yKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF90aW1lcmZkX2dldHRpbWUobG9uZyB1ZmQsIGxvbmcgb3Rtcik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3RpbWVyZmRfZ2V0dGltZShsb25nIHJlcywgbG9uZyB1ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG90bXIpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V2ZW50ZmQobG9uZyBjb3VudCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2V2ZW50ZmQobG9uZyByZXMsIGxvbmcgY291bnQpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX2V2ZW50ZmQyKGxvbmcgY291bnQsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9ldmVudGZkMihsb25nIHJlcywgbG9uZyBjb3VudCwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfb2xkX3JlYWRkaXIobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMik7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9yZWFkZGlyKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wc2VsZWN0Nihsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMywgbG9uZyBhcmc0LCBsb25nIGFyZzUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wc2VsZWN0Nihsb25nIHJlcywgbG9uZyBhcmcwLCBsb25nIGFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnMiwgbG9uZyBhcmczLCBsb25nIGFyZzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgYXJnNSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHBvbGwobG9uZyBhcmcwLCBsb25nIGFyZzEsIGxvbmcgYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGFyZzMsIGxvbmcgYXJnNCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3Bwb2xsKGxvbmcgcmVzLCBsb25nIGFyZzAsIGxvbmcgYXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBhcmcyLCBsb25nIGFyZzMsIGxvbmcgYXJnNCk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmFub3RpZnlfaW5pdChsb25nIGZsYWdzLCBsb25nIGV2ZW50X2ZfZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mYW5vdGlmeV9pbml0KGxvbmcgcmVzLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXZlbnRfZl9mbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZmFub3RpZnlfbWFyayhsb25nIGZhbm90aWZ5X2ZkLCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtYXNrLCBsb25nIGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBwYXRobmFtZSk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX2Zhbm90aWZ5X21hcmsobG9uZyByZXMsIGxvbmcgZmFub3RpZnlfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywgbG9uZyBtYXNrLCBsb25nIGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcGF0aG5hbWUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3N5bmNmcyhsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfc3luY2ZzKGxvbmcgcmVzLCBsb25nIGZkKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9wZXJmX2V2ZW50X29wZW4obG9uZyBhdHRyX3VwdHIsIGxvbmcgcGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGNwdSwgbG9uZyBncm91cF9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX3BlcmZfZXZlbnRfb3Blbihsb25nIHJlcywgbG9uZyBhdHRyX3VwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBpZCwgbG9uZyBjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGdyb3VwX2ZkLCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9tbWFwX3Bnb2ZmKGxvbmcgYWRkciwgbG9uZyBsZW4sIGxvbmcgcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsIGxvbmcgZmQsIGxvbmcgcGdvZmYpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9tbWFwX3Bnb2ZmKGxvbmcgcmVzLCBsb25nIGFkZHIsIGxvbmcgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcHJvdCwgbG9uZyBmbGFncywgbG9uZyBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBnb2ZmKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vbGRfbW1hcChsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcG9zdF9pbXBsX29sZF9tbWFwKGxvbmcgcmVzLCBsb25nIGFyZyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfbmFtZV90b19oYW5kbGVfYXQobG9uZyBkZmQsIGxvbmcgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGhhbmRsZSwgbG9uZyBtbnRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfbmFtZV90b19oYW5kbGVfYXQobG9uZyByZXMsIGxvbmcgZGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5hbWUsIGxvbmcgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1udF9pZCwgbG9uZyBmbGFnKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF9vcGVuX2J5X2hhbmRsZV9hdChsb25nIG1vdW50ZGlyZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBoYW5kbGUsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9vcGVuX2J5X2hhbmRsZV9hdChsb25nIHJlcywgbG9uZyBtb3VudGRpcmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGhhbmRsZSwgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfc2V0bnMobG9uZyBmZCwgbG9uZyBuc3R5cGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9zZXRucyhsb25nIHJlcywgbG9uZyBmZCwgbG9uZyBuc3R5cGUpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3ByZV9pbXBsX3Byb2Nlc3Nfdm1fcmVhZHYobG9uZyBwaWQsIGxvbmcgbHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbGlvdmNudCwgbG9uZyBydmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByaW92Y250LCBsb25nIGZsYWdzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wb3N0X2ltcGxfcHJvY2Vzc192bV9yZWFkdihsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsdmVjLCBsb25nIGxpb3ZjbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBydmVjLCBsb25nIHJpb3ZjbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfcHJvY2Vzc192bV93cml0ZXYobG9uZyBwaWQsIGxvbmcgbHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxpb3ZjbnQsIGxvbmcgcnZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJpb3ZjbnQsIGxvbmcgZmxhZ3MpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9wcm9jZXNzX3ZtX3dyaXRldihsb25nIHJlcywgbG9uZyBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbHZlYywgbG9uZyBsaW92Y250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHJ2ZWMsIGxvbmcgcmlvdmNudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncyk7Cit2b2lkIF9fc2FuaXRpemVyX3N5c2NhbGxfcHJlX2ltcGxfZm9yaygpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF9mb3JrKGxvbmcgcmVzKTsKK3ZvaWQgX19zYW5pdGl6ZXJfc3lzY2FsbF9wcmVfaW1wbF92Zm9yaygpOwordm9pZCBfX3Nhbml0aXplcl9zeXNjYWxsX3Bvc3RfaW1wbF92Zm9yayhsb25nIHJlcyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gU0FOSVRJWkVSX0xJTlVYX1NZU0NBTExfSE9PS1NfSApkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvbHNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xzYW5faW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiOGU3NQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL2xzYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSw4NCBAQAorLy89PT0tLSBzYW5pdGl6ZXIvbHNhbl9pbnRlcmZhY2UuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIExlYWtTYW5pdGl6ZXIuCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSAorI2RlZmluZSBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSAorCisjaW5jbHVkZSA8c2FuaXRpemVyL2NvbW1vbl9pbnRlcmZhY2VfZGVmcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisgIC8vIEFsbG9jYXRpb25zIG1hZGUgYmV0d2VlbiBjYWxscyB0byBfX2xzYW5fZGlzYWJsZSgpIGFuZCBfX2xzYW5fZW5hYmxlKCkgd2lsbAorICAvLyBiZSB0cmVhdGVkIGFzIG5vbi1sZWFrcy4gRGlzYWJsZS9lbmFibGUgcGFpcnMgbWF5IGJlIG5lc3RlZC4KKyAgdm9pZCBfX2xzYW5fZGlzYWJsZSgpOworICB2b2lkIF9fbHNhbl9lbmFibGUoKTsKKworICAvLyBUaGUgaGVhcCBvYmplY3QgaW50byB3aGljaCBwIHBvaW50cyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBub24tbGVhay4KKyAgdm9pZCBfX2xzYW5faWdub3JlX29iamVjdChjb25zdCB2b2lkICpwKTsKKworICAvLyBNZW1vcnkgcmVnaW9ucyByZWdpc3RlcmVkIHRocm91Z2ggdGhpcyBpbnRlcmZhY2Ugd2lsbCBiZSB0cmVhdGVkIGFzIHNvdXJjZXMKKyAgLy8gb2YgbGl2ZSBwb2ludGVycyBkdXJpbmcgbGVhayBjaGVja2luZy4gVXNlZnVsIGlmIHlvdSBzdG9yZSBwb2ludGVycyBpbgorICAvLyBtYXBwZWQgbWVtb3J5LgorICAvLyBQb2ludHMgb2Ygbm90ZToKKyAgLy8gLSBfX2xzYW5fdW5yZWdpc3Rlcl9yb290X3JlZ2lvbigpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgcG9pbnRlciBhbmQKKyAgLy8gc2l6ZSB0aGF0IGhhdmUgZWFybGllciBiZWVuIHBhc3NlZCB0byBfX2xzYW5fcmVnaXN0ZXJfcm9vdF9yZWdpb24oKQorICAvLyAtIExTYW4gd2lsbCBza2lwIGFueSBpbmFjY2Vzc2libGUgbWVtb3J5IHdoZW4gc2Nhbm5pbmcgYSByb290IHJlZ2lvbi4gRS5nLiwKKyAgLy8gaWYgeW91IG1hcCBtZW1vcnkgd2l0aGluIGEgbGFyZ2VyIHJlZ2lvbiB0aGF0IHlvdSBoYXZlIG1wcm90ZWN0J2VkLCB5b3UgY2FuCisgIC8vIHJlZ2lzdGVyIHRoZSBlbnRpcmUgbGFyZ2UgcmVnaW9uLgorICAvLyAtIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZS4gVGhpcyBpbnRlcmZhY2UgaXMKKyAgLy8gaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgYSBzbWFsbCBudW1iZXIgb2YgcmVsYXRpdmVseSBzdGF0aWMgcmVnaW9ucy4KKyAgdm9pZCBfX2xzYW5fcmVnaXN0ZXJfcm9vdF9yZWdpb24oY29uc3Qgdm9pZCAqcCwgc2l6ZV90IHNpemUpOworICB2b2lkIF9fbHNhbl91bnJlZ2lzdGVyX3Jvb3RfcmVnaW9uKGNvbnN0IHZvaWQgKnAsIHNpemVfdCBzaXplKTsKKworICAvLyBDaGVjayBmb3IgbGVha3Mgbm93LiBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgaWRlbnRpY2FsbHkgdG8gdGhlIGRlZmF1bHQKKyAgLy8gZW5kLW9mLXByb2Nlc3MgbGVhayBjaGVjay4gSW4gcGFydGljdWxhciwgaXQgd2lsbCB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MgaWYKKyAgLy8gbGVha3MgYXJlIGZvdW5kIGFuZCB0aGUgZXhpdGNvZGUgcnVudGltZSBmbGFnIGlzIG5vbi16ZXJvLgorICAvLyBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIG5vIGVmZmVjdCBhbmQgZW5kLW9mLXByb2Nlc3MKKyAgLy8gbGVhayBjaGVjayB3aWxsIG5vdCBydW4uIEVmZmVjdGl2ZWx5LCBlbmQtb2YtcHJvY2VzcyBsZWFrIGNoZWNrIGlzIG1vdmVkIHRvCisgIC8vIHRoZSB0aW1lIG9mIGZpcnN0IGludm9jYXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAgLy8gQnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGVhcmx5IGR1cmluZyBwcm9jZXNzIHNodXRkb3duLCB5b3UgY2FuIGluc3RydWN0CisgIC8vIExTYW4gdG8gaWdub3JlIHNodXRkb3duLW9ubHkgbGVha3Mgd2hpY2ggaGFwcGVuIGxhdGVyIG9uLgorICB2b2lkIF9fbHNhbl9kb19sZWFrX2NoZWNrKCk7CisKKyAgLy8gQ2hlY2sgZm9yIGxlYWtzIG5vdy4gUmV0dXJucyB6ZXJvIGlmIG5vIGxlYWtzIGhhdmUgYmVlbiBmb3VuZCBvciBpZiBsZWFrCisgIC8vIGRldGVjdGlvbiBpcyBkaXNhYmxlZCwgbm9uLXplcm8gb3RoZXJ3aXNlLgorICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseSwgZS5nLiB0byBwZXJpb2RpY2FsbHkgY2hlY2sgYQorICAvLyBsb25nLXJ1bm5pbmcgcHJvY2Vzcy4gSXQgcHJpbnRzIGEgbGVhayByZXBvcnQgaWYgYXBwcm9wcmlhdGUsIGJ1dCBkb2VzIG5vdAorICAvLyB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YKKyAgLy8gX19sc2FuX2RvX2xlYWtfY2hlY2soKSBvciB0aGUgZW5kLW9mLXByb2Nlc3MgbGVhayBjaGVjaywgYW5kIGlzIG5vdAorICAvLyBhZmZlY3RlZCBieSB0aGVtLgorICBpbnQgX19sc2FuX2RvX3JlY292ZXJhYmxlX2xlYWtfY2hlY2soKTsKKworICAvLyBUaGUgdXNlciBtYXkgb3B0aW9uYWxseSBwcm92aWRlIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWxsb3cgbGVhayBjaGVja2luZworICAvLyBmb3IgdGhlIHByb2dyYW0gaXQgaXMgbGlua2VkIGludG8gKGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm9uLXplcm8pLiBUaGlzCisgIC8vIGZ1bmN0aW9uIG11c3QgYmUgZGVmaW5lZCBhcyByZXR1cm5pbmcgYSBjb25zdGFudCB2YWx1ZTsgYW55IGJlaGF2aW9yIGJleW9uZAorICAvLyB0aGF0IGlzIHVuc3VwcG9ydGVkLgorICBpbnQgX19sc2FuX2lzX3R1cm5lZF9vZmYoKTsKKworICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGFuZCBzaG91bGQgcmV0dXJuCisgIC8vIGEgc3RyaW5nIGNvbnRhaW5pbmcgTFNhbiBzdXBwcmVzc2lvbnMuCisgIGNvbnN0IGNoYXIgKl9fbHNhbl9kZWZhdWx0X3N1cHByZXNzaW9ucygpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisKK25hbWVzcGFjZSBfX2xzYW4geworY2xhc3MgU2NvcGVkRGlzYWJsZXIgeworIHB1YmxpYzoKKyAgU2NvcGVkRGlzYWJsZXIoKSB7IF9fbHNhbl9kaXNhYmxlKCk7IH0KKyAgflNjb3BlZERpc2FibGVyKCkgeyBfX2xzYW5fZW5hYmxlKCk7IH0KK307Cit9ICAvLyBuYW1lc3BhY2UgX19sc2FuCisjZW5kaWYKKworI2VuZGlmICAvLyBTQU5JVElaRVJfTFNBTl9JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zYW5pdGl6ZXIvbXNhbl9pbnRlcmZhY2UuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL21zYW5faW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2YTM3NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL21zYW5faW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8vPT09LS0gbXNhbl9pbnRlcmZhY2UuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBmaWxlIGlzIGEgcGFydCBvZiBNZW1vcnlTYW5pdGl6ZXIuCisvLworLy8gUHVibGljIGludGVyZmFjZSBoZWFkZXIuCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworI2lmbmRlZiBNU0FOX0lOVEVSRkFDRV9ICisjZGVmaW5lIE1TQU5fSU5URVJGQUNFX0gKKworI2luY2x1ZGUgPHNhbml0aXplci9jb21tb25faW50ZXJmYWNlX2RlZnMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAvKiBTZXQgcmF3IG9yaWdpbiBmb3IgdGhlIG1lbW9yeSByYW5nZS4gKi8KKyAgdm9pZCBfX21zYW5fc2V0X29yaWdpbihjb25zdCB2b2xhdGlsZSB2b2lkICphLCBzaXplX3Qgc2l6ZSwgdWludDMyX3Qgb3JpZ2luKTsKKworICAvKiBHZXQgcmF3IG9yaWdpbiBmb3IgYW4gYWRkcmVzcy4gKi8KKyAgdWludDMyX3QgX19tc2FuX2dldF9vcmlnaW4oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSk7CisKKyAgLyogVGVzdCB0aGF0IHRoaXNfaWQgaXMgYSBkZXNjZW5kYW50IG9mIHByZXZfaWQgKG9yIHRoZXkgYXJlIHNpbXBseSBlcXVhbCkuCisgICAqICJkZXNjZW5kYW50IiBoZXJlIG1lYW5zIHRoZXkgYXJlIHBhcnQgb2YgdGhlIHNhbWUgY2hhaW4sIGNyZWF0ZWQgd2l0aAorICAgKiBfX21zYW5fY2hhaW5fb3JpZ2luLiAqLworICBpbnQgX19tc2FuX29yaWdpbl9pc19kZXNjZW5kYW50X29yX3NhbWUodWludDMyX3QgdGhpc19pZCwgdWludDMyX3QgcHJldl9pZCk7CisKKyAgLyogUmV0dXJucyBub24temVybyBpZiB0cmFja2luZyBvcmlnaW5zLiAqLworICBpbnQgX19tc2FuX2dldF90cmFja19vcmlnaW5zKCk7CisKKyAgLyogUmV0dXJucyB0aGUgb3JpZ2luIGlkIG9mIHRoZSBsYXRlc3QgVU1SIGluIHRoZSBjYWxsaW5nIHRocmVhZC4gKi8KKyAgdWludDMyX3QgX19tc2FuX2dldF91bXJfb3JpZ2luKCk7CisKKyAgLyogTWFrZSBtZW1vcnkgcmVnaW9uIGZ1bGx5IGluaXRpYWxpemVkICh3aXRob3V0IGNoYW5naW5nIGl0cyBjb250ZW50cykuICovCisgIHZvaWQgX19tc2FuX3VucG9pc29uKGNvbnN0IHZvbGF0aWxlIHZvaWQgKmEsIHNpemVfdCBzaXplKTsKKworICAvKiBNYWtlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBmdWxseSBpbml0aWFsaXplZCAod2l0aG91dCBjaGFuZ2luZyBpdHMKKyAgICAgY29udGVudHMpLiAqLworICB2b2lkIF9fbXNhbl91bnBvaXNvbl9zdHJpbmcoY29uc3Qgdm9sYXRpbGUgY2hhciAqYSk7CisKKyAgLyogTWFrZSBtZW1vcnkgcmVnaW9uIGZ1bGx5IHVuaW5pdGlhbGl6ZWQgKHdpdGhvdXQgY2hhbmdpbmcgaXRzIGNvbnRlbnRzKS4KKyAgICAgVGhpcyBpcyBhIGxlZ2FjeSBpbnRlcmZhY2UgdGhhdCBkb2VzIG5vdCB1cGRhdGUgb3JpZ2luIGluZm9ybWF0aW9uLiBVc2UKKyAgICAgX19tc2FuX2FsbG9jYXRlZF9tZW1vcnkoKSBpbnN0ZWFkLiAqLworICB2b2lkIF9fbXNhbl9wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqYSwgc2l6ZV90IHNpemUpOworCisgIC8qIE1ha2UgbWVtb3J5IHJlZ2lvbiBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZCAod2l0aG91dCBjaGFuZ2luZyBpdHMgY29udGVudHMpLgorICAgKi8KKyAgdm9pZCBfX21zYW5fcGFydGlhbF9wb2lzb24oY29uc3Qgdm9sYXRpbGUgdm9pZCAqZGF0YSwgdm9pZCAqc2hhZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CisKKyAgLyogUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCAoYXQgbGVhc3QgcGFydGlhbGx5KSBwb2lzb25lZCBieXRlIGluIHRoZQorICAgICBtZW1vcnkgcmFuZ2UsIG9yIC0xIGlmIHRoZSB3aG9sZSByYW5nZSBpcyBnb29kLiAqLworICBpbnRwdHJfdCBfX21zYW5fdGVzdF9zaGFkb3coY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCwgc2l6ZV90IHNpemUpOworCisgIC8qIENoZWNrcyB0aGF0IG1lbW9yeSByYW5nZSBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIHJlcG9ydHMgYW4gZXJyb3IgaWYgaXQKKyAgICogaXMgbm90LiAqLworICB2b2lkIF9fbXNhbl9jaGVja19tZW1faXNfaW5pdGlhbGl6ZWQoY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCwgc2l6ZV90IHNpemUpOworCisgIC8qIEZvciB0ZXN0aW5nOgorICAgICBfX21zYW5fc2V0X2V4cGVjdF91bXIoMSk7CisgICAgIC4uLiBzb21lIGJ1Z2d5IGNvZGUgLi4uCisgICAgIF9fbXNhbl9zZXRfZXhwZWN0X3VtcigwKTsKKyAgICAgVGhlIGxhc3QgbGluZSB3aWxsIHZlcmlmeSB0aGF0IGEgVU1SIGhhcHBlbmVkLiAqLworICB2b2lkIF9fbXNhbl9zZXRfZXhwZWN0X3VtcihpbnQgZXhwZWN0X3Vtcik7CisKKyAgLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBrZWVwX2dvaW5nIGZsYWcuIE5vbi16ZXJvIHZhbHVlIG1lYW5zIGRvbid0IHRlcm1pbmF0ZQorICAgICBwcm9ncmFtIGV4ZWN1dGlvbiB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLiBUaGlzIHdpbGwgbm90IGFmZmVjdCBlcnJvciBpbgorICAgICBtb2R1bGVzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRob3V0IHRoZSBjb3JyZXNwb25kaW5nIGNvbXBpbGVyIGZsYWcuICovCisgIHZvaWQgX19tc2FuX3NldF9rZWVwX2dvaW5nKGludCBrZWVwX2dvaW5nKTsKKworICAvKiBQcmludCBzaGFkb3cgYW5kIG9yaWdpbiBmb3IgdGhlIG1lbW9yeSByYW5nZSB0byBzdGRlcnIgaW4gYSBodW1hbi1yZWFkYWJsZQorICAgICBmb3JtYXQuICovCisgIHZvaWQgX19tc2FuX3ByaW50X3NoYWRvdyhjb25zdCB2b2xhdGlsZSB2b2lkICp4LCBzaXplX3Qgc2l6ZSk7CisKKyAgLyogUHJpbnQgc2hhZG93IGZvciB0aGUgbWVtb3J5IHJhbmdlIHRvIHN0ZGVyciBpbiBhIG1pbmltYWxpc3RpYworICAgICBodW1hbi1yZWFkYWJsZSBmb3JtYXQuICovCisgIHZvaWQgX19tc2FuX2R1bXBfc2hhZG93KGNvbnN0IHZvbGF0aWxlIHZvaWQgKngsIHNpemVfdCBzaXplKTsKKworICAvKiBSZXR1cm5zIHRydWUgaWYgcnVubmluZyB1bmRlciBhIGR5bmFtaWMgdG9vbCAoRHluYW1vUmlvLWJhc2VkKS4gKi8KKyAgaW50ICBfX21zYW5faGFzX2R5bmFtaWNfY29tcG9uZW50KCk7CisKKyAgLyogVGVsbCBNU2FuIGFib3V0IG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgKGV4LjogY3VzdG9tIGFsbG9jYXRvcikuCisgICAgIE1lbW9yeSB3aWxsIGJlIG1hcmtlZCB1bmluaXRpYWxpemVkLCB3aXRoIG9yaWdpbiBhdCB0aGUgY2FsbCBzaXRlLiAqLworICB2b2lkIF9fbXNhbl9hbGxvY2F0ZWRfbWVtb3J5KGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworICAvKiBUZWxsIE1TYW4gYWJvdXQgbmV3bHkgZGVzdHJveWVkIG1lbW9yeS4gTWFyayBtZW1vcnkgYXMgdW5pbml0aWFsaXplZC4gKi8KKyAgdm9pZCBfX3Nhbml0aXplcl9kdG9yX2NhbGxiYWNrKGNvbnN0IHZvbGF0aWxlIHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworICAvKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHVzZXIgYW5kIHNob3VsZCByZXR1cm4KKyAgICAgYSBzdHJpbmcgY29udGFpbmluZyBNc2FuIHJ1bnRpbWUgb3B0aW9ucy4gU2VlIG1zYW5fZmxhZ3MuaCBmb3IgZGV0YWlscy4gKi8KKyAgY29uc3QgY2hhciogX19tc2FuX2RlZmF1bHRfb3B0aW9ucygpOworCisgIC8qIERlcHJlY2F0ZWQuIENhbGwgX19zYW5pdGl6ZXJfc2V0X2RlYXRoX2NhbGxiYWNrIGluc3RlYWQuICovCisgIHZvaWQgX19tc2FuX3NldF9kZWF0aF9jYWxsYmFjayh2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKKworICAvKiBVcGRhdGUgc2hhZG93IGZvciB0aGUgYXBwbGljYXRpb24gY29weSBvZiBzaXplIGJ5dGVzIGZyb20gc3JjIHRvIGRzdC4KKyAgICAgU3JjIGFuZCBkc3QgYXJlIGFwcGxpY2F0aW9uIGFkZHJlc3Nlcy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb3B5IHRoZQorICAgICBhY3R1YWwgYXBwbGljYXRpb24gbWVtb3J5LCBpdCBvbmx5IHVwZGF0ZXMgc2hhZG93IGFuZCBvcmlnaW4gZm9yIHN1Y2gKKyAgICAgY29weS4gU291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWdpb25zIGNhbiBvdmVybGFwLiAqLworICB2b2lkIF9fbXNhbl9jb3B5X3NoYWRvdyhjb25zdCB2b2xhdGlsZSB2b2lkICpkc3QsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci90c2FuX2ludGVyZmFjZV9hdG9taWMuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2FuaXRpemVyL3RzYW5faW50ZXJmYWNlX2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTc3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3Nhbml0aXplci90c2FuX2ludGVyZmFjZV9hdG9taWMuaApAQCAtMCwwICsxLDIyMiBAQAorLy89PT0tLSB0c2FuX2ludGVyZmFjZV9hdG9taWMuaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIFRocmVhZFNhbml0aXplciAoVFNhbiksIGEgcmFjZSBkZXRlY3Rvci4KKy8vCisvLyBQdWJsaWMgaW50ZXJmYWNlIGhlYWRlciBmb3IgVFNhbiBhdG9taWNzLgorLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKKyNkZWZpbmUgVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmIGNoYXIgICAgIF9fdHNhbl9hdG9taWM4OwordHlwZWRlZiBzaG9ydCAgICBfX3RzYW5fYXRvbWljMTY7ICAvLyBOT0xJTlQKK3R5cGVkZWYgaW50ICAgICAgX190c2FuX2F0b21pYzMyOwordHlwZWRlZiBsb25nICAgICBfX3RzYW5fYXRvbWljNjQ7ICAvLyBOT0xJTlQKKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKSBcCisgICAgfHwgKF9fY2xhbmdfbWFqb3JfXyAqIDEwMCArIF9fY2xhbmdfbWlub3JfXyA+PSAzMDIpCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgX19pbnQxMjggX190c2FuX2F0b21pYzEyODsKKyMgZGVmaW5lIF9fVFNBTl9IQVNfSU5UMTI4IDEKKyNlbHNlCisjIGRlZmluZSBfX1RTQU5fSEFTX0lOVDEyOCAwCisjZW5kaWYKKworLy8gUGFydCBvZiBBQkksIGRvIG5vdCBjaGFuZ2UuCisvLyBodHRwOi8vbGx2bS5vcmcvdmlld3ZjL2xsdm0tcHJvamVjdC9saWJjeHgvdHJ1bmsvaW5jbHVkZS9hdG9taWM/dmlldz1tYXJrdXAKK3R5cGVkZWYgZW51bSB7CisgIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsYXhlZCwKKyAgX190c2FuX21lbW9yeV9vcmRlcl9jb25zdW1lLAorICBfX3RzYW5fbWVtb3J5X29yZGVyX2FjcXVpcmUsCisgIF9fdHNhbl9tZW1vcnlfb3JkZXJfcmVsZWFzZSwKKyAgX190c2FuX21lbW9yeV9vcmRlcl9hY3FfcmVsLAorICBfX3RzYW5fbWVtb3J5X29yZGVyX3NlcV9jc3QKK30gX190c2FuX21lbW9yeV9vcmRlcjsKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfbG9hZChjb25zdCB2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfbG9hZChjb25zdCB2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2xvYWQoY29uc3Qgdm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9sb2FkKGNvbnN0IHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2xvYWQoY29uc3Qgdm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNlbmRpZgorCit2b2lkIF9fdHNhbl9hdG9taWM4X3N0b3JlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLCBfX3RzYW5fYXRvbWljOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOwordm9pZCBfX3RzYW5fYXRvbWljMTZfc3RvcmUodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLCBfX3RzYW5fYXRvbWljMTYgdiwKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK3ZvaWQgX190c2FuX2F0b21pYzMyX3N0b3JlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwgX190c2FuX2F0b21pYzMyIHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbyk7Cit2b2lkIF9fdHNhbl9hdG9taWM2NF9zdG9yZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsIF9fdHNhbl9hdG9taWM2NCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4Cit2b2lkIF9fdHNhbl9hdG9taWMxMjhfc3RvcmUodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwgX190c2FuX2F0b21pYzEyOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2V4Y2hhbmdlKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9leGNoYW5nZSh2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZXhjaGFuZ2Uodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfYWRkKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF9hZGQodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX2FkZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAorICAgIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9mZXRjaF9zdWIodm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLAorICAgIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljNjQgX190c2FuX2F0b21pYzY0X2ZldGNoX3N1Yih2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfc3ViKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNlbmRpZgorCitfX3RzYW5fYXRvbWljOCBfX3RzYW5fYXRvbWljOF9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCisgICAgX190c2FuX2F0b21pYzggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMTYgX190c2FuX2F0b21pYzE2X2ZldGNoX2FuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLAorICAgIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfZmV0Y2hfYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fYXRvbWljNjQgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjaWYgX19UU0FOX0hBU19JTlQxMjgKK19fdHNhbl9hdG9taWMxMjggX190c2FuX2F0b21pYzEyOF9mZXRjaF9hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX29yKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzE2IF9fdHNhbl9hdG9taWMxNl9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF9vcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljNjQgKmEsCisgICAgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2lmIF9fVFNBTl9IQVNfSU5UMTI4CitfX3RzYW5fYXRvbWljMTI4IF9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfb3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK19fdHNhbl9hdG9taWM4IF9fdHNhbl9hdG9taWM4X2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfeG9yKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljMzIgX190c2FuX2F0b21pYzMyX2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyIHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzY0IF9fdHNhbl9hdG9taWM2NF9mZXRjaF94b3Iodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX3hvcih2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTI4ICphLAorICAgIF9fdHNhbl9hdG9taWMxMjggdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfZmV0Y2hfbmFuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfZmV0Y2hfbmFuZCh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMTYgKmEsCisgICAgX190c2FuX2F0b21pYzE2IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworX190c2FuX2F0b21pYzMyIF9fdHNhbl9hdG9taWMzMl9mZXRjaF9uYW5kKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbyk7CitfX3RzYW5fYXRvbWljNjQgX190c2FuX2F0b21pYzY0X2ZldGNoX25hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2ZldGNoX25hbmQodm9sYXRpbGUgX190c2FuX2F0b21pYzEyOCAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTI4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8pOworI2VuZGlmCisKK2ludCBfX3RzYW5fYXRvbWljOF9jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsCisgICAgX190c2FuX2F0b21pYzggKmMsIF9fdHNhbl9hdG9taWM4IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sCisgICAgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK2ludCBfX3RzYW5fYXRvbWljMTZfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgKmMsIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vhayh2b2xhdGlsZSBfX3RzYW5fYXRvbWljMzIgKmEsCisgICAgX190c2FuX2F0b21pYzMyICpjLCBfX3RzYW5fYXRvbWljMzIgdiwgX190c2FuX21lbW9yeV9vcmRlciBtbywKKyAgICBfX3RzYW5fbWVtb3J5X29yZGVyIGZhaWxfbW8pOworaW50IF9fdHNhbl9hdG9taWM2NF9jb21wYXJlX2V4Y2hhbmdlX3dlYWsodm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLAorICAgIF9fdHNhbl9hdG9taWM2NCAqYywgX190c2FuX2F0b21pYzY0IHYsIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sCisgICAgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAoraW50IF9fdHNhbl9hdG9taWMxMjhfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCAqYywgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKworaW50IF9fdHNhbl9hdG9taWM4X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM4ICphLAorICAgIF9fdHNhbl9hdG9taWM4ICpjLCBfX3RzYW5fYXRvbWljOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzE2X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxNiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMTYgKmMsIF9fdHNhbl9hdG9taWMxNiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzMyX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMzMiAqYSwKKyAgICBfX3RzYW5fYXRvbWljMzIgKmMsIF9fdHNhbl9hdG9taWMzMiB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CitpbnQgX190c2FuX2F0b21pYzY0X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWM2NCAqYSwKKyAgICBfX3RzYW5fYXRvbWljNjQgKmMsIF9fdHNhbl9hdG9taWM2NCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjaWYgX19UU0FOX0hBU19JTlQxMjgKK2ludCBfX3RzYW5fYXRvbWljMTI4X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsCisgICAgX190c2FuX2F0b21pYzEyOCAqYywgX190c2FuX2F0b21pYzEyOCB2LCBfX3RzYW5fbWVtb3J5X29yZGVyIG1vLAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKworX190c2FuX2F0b21pYzggX190c2FuX2F0b21pYzhfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzggKmEsIF9fdHNhbl9hdG9taWM4IGMsIF9fdHNhbl9hdG9taWM4IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWMxNiBfX3RzYW5fYXRvbWljMTZfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzE2ICphLCBfX3RzYW5fYXRvbWljMTYgYywgX190c2FuX2F0b21pYzE2IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWMzMiBfX3RzYW5fYXRvbWljMzJfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzMyICphLCBfX3RzYW5fYXRvbWljMzIgYywgX190c2FuX2F0b21pYzMyIHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKK19fdHNhbl9hdG9taWM2NCBfX3RzYW5fYXRvbWljNjRfY29tcGFyZV9leGNoYW5nZV92YWwoCisgICAgdm9sYXRpbGUgX190c2FuX2F0b21pYzY0ICphLCBfX3RzYW5fYXRvbWljNjQgYywgX190c2FuX2F0b21pYzY0IHYsCisgICAgX190c2FuX21lbW9yeV9vcmRlciBtbywgX190c2FuX21lbW9yeV9vcmRlciBmYWlsX21vKTsKKyNpZiBfX1RTQU5fSEFTX0lOVDEyOAorX190c2FuX2F0b21pYzEyOCBfX3RzYW5fYXRvbWljMTI4X2NvbXBhcmVfZXhjaGFuZ2VfdmFsKAorICAgIHZvbGF0aWxlIF9fdHNhbl9hdG9taWMxMjggKmEsIF9fdHNhbl9hdG9taWMxMjggYywgX190c2FuX2F0b21pYzEyOCB2LAorICAgIF9fdHNhbl9tZW1vcnlfb3JkZXIgbW8sIF9fdHNhbl9tZW1vcnlfb3JkZXIgZmFpbF9tbyk7CisjZW5kaWYKKwordm9pZCBfX3RzYW5fYXRvbWljX3RocmVhZF9mZW5jZShfX3RzYW5fbWVtb3J5X29yZGVyIG1vKTsKK3ZvaWQgX190c2FuX2F0b21pY19zaWduYWxfZmVuY2UoX190c2FuX21lbW9yeV9vcmRlciBtbyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLy8gVFNBTl9JTlRFUkZBQ0VfQVRPTUlDX0gKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc2hhaW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NoYWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNWQyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NoYWludHJpbi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qPT09LS0tLSBzaGFpbnRyaW4uaCAtIFNIQSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHNoYWludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19TSEFJTlRSSU5fSAorI2RlZmluZSBfX1NIQUlOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic2hhIikpKQorCisjZGVmaW5lIF9tbV9zaGExcm5kczRfZXB1MzIoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgX19idWlsdGluX2lhMzJfc2hhMXJuZHM0KChfX3Y0c2kpKF9fbTEyOGkpKFYxKSwgKF9fdjRzaSkoX19tMTI4aSkoVjIpLCAoTSkpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTFuZXh0ZV9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zaGExbmV4dGUoKF9fdjRzaSlfX1gsIChfX3Y0c2kpX19ZKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGExbXNnMV9lcHUzMihfX20xMjhpIF9fWCwgX19tMTI4aSBfX1kpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9zaGExbXNnMSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTFtc2cyX2VwdTMyKF9fbTEyOGkgX19YLCBfX20xMjhpIF9fWSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NoYTFtc2cyKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hhMjU2cm5kczJfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZLCBfX20xMjhpIF9fWikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3NoYTI1NnJuZHMyKChfX3Y0c2kpX19YLCAoX192NHNpKV9fWSwgKF9fdjRzaSlfX1opOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTI1Nm1zZzFfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2hhMjU2bXNnMSgoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYTI1Nm1zZzJfZXB1MzIoX19tMTI4aSBfX1gsIF9fbTEyOGkgX19ZKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfc2hhMjU2bXNnMigoX192NHNpKV9fWCwgKF9fdjRzaSlfX1kpOworfQorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX1NIQUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3NtbWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zbW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWFkMDdmCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zbW1pbnRyaW4uaApAQCAtMCwwICsxLDUwOCBAQAorLyo9PT0tLS0tIHNtbWludHJpbi5oIC0gU1NFNCBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfU01NSU5UUklOX0gKKyNkZWZpbmUgX1NNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDx0bW1pbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJzc2U0LjEiKSkpCisKKy8qIFNTRTQgUm91bmRpbmcgbWFjcm9zLiAqLworI2RlZmluZSBfTU1fRlJPVU5EX1RPX05FQVJFU1RfSU5UICAgIDB4MDAKKyNkZWZpbmUgX01NX0ZST1VORF9UT19ORUdfSU5GICAgICAgICAweDAxCisjZGVmaW5lIF9NTV9GUk9VTkRfVE9fUE9TX0lORiAgICAgICAgMHgwMgorI2RlZmluZSBfTU1fRlJPVU5EX1RPX1pFUk8gICAgICAgICAgIDB4MDMKKyNkZWZpbmUgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OICAgICAweDA0CisKKyNkZWZpbmUgX01NX0ZST1VORF9SQUlTRV9FWEMgICAgICAgICAweDAwCisjZGVmaW5lIF9NTV9GUk9VTkRfTk9fRVhDICAgICAgICAgICAgMHgwOAorCisjZGVmaW5lIF9NTV9GUk9VTkRfTklOVCAgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfVE9fTkVBUkVTVF9JTlQpCisjZGVmaW5lIF9NTV9GUk9VTkRfRkxPT1IgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfVE9fTkVHX0lORikKKyNkZWZpbmUgX01NX0ZST1VORF9DRUlMICAgICAgKF9NTV9GUk9VTkRfUkFJU0VfRVhDIHwgX01NX0ZST1VORF9UT19QT1NfSU5GKQorI2RlZmluZSBfTU1fRlJPVU5EX1RSVU5DICAgICAoX01NX0ZST1VORF9SQUlTRV9FWEMgfCBfTU1fRlJPVU5EX1RPX1pFUk8pCisjZGVmaW5lIF9NTV9GUk9VTkRfUklOVCAgICAgIChfTU1fRlJPVU5EX1JBSVNFX0VYQyB8IF9NTV9GUk9VTkRfQ1VSX0RJUkVDVElPTikKKyNkZWZpbmUgX01NX0ZST1VORF9ORUFSQllJTlQgKF9NTV9GUk9VTkRfTk9fRVhDIHwgX01NX0ZST1VORF9DVVJfRElSRUNUSU9OKQorCisjZGVmaW5lIF9tbV9jZWlsX3BzKFgpICAgICAgIF9tbV9yb3VuZF9wcygoWCksIF9NTV9GUk9VTkRfQ0VJTCkKKyNkZWZpbmUgX21tX2NlaWxfcGQoWCkgICAgICAgX21tX3JvdW5kX3BkKChYKSwgX01NX0ZST1VORF9DRUlMKQorI2RlZmluZSBfbW1fY2VpbF9zcyhYLCBZKSAgICBfbW1fcm91bmRfc3MoKFgpLCAoWSksIF9NTV9GUk9VTkRfQ0VJTCkKKyNkZWZpbmUgX21tX2NlaWxfc2QoWCwgWSkgICAgX21tX3JvdW5kX3NkKChYKSwgKFkpLCBfTU1fRlJPVU5EX0NFSUwpCisKKyNkZWZpbmUgX21tX2Zsb29yX3BzKFgpICAgICAgX21tX3JvdW5kX3BzKChYKSwgX01NX0ZST1VORF9GTE9PUikKKyNkZWZpbmUgX21tX2Zsb29yX3BkKFgpICAgICAgX21tX3JvdW5kX3BkKChYKSwgX01NX0ZST1VORF9GTE9PUikKKyNkZWZpbmUgX21tX2Zsb29yX3NzKFgsIFkpICAgX21tX3JvdW5kX3NzKChYKSwgKFkpLCBfTU1fRlJPVU5EX0ZMT09SKQorI2RlZmluZSBfbW1fZmxvb3Jfc2QoWCwgWSkgICBfbW1fcm91bmRfc2QoKFgpLCAoWSksIF9NTV9GUk9VTkRfRkxPT1IpCisKKyNkZWZpbmUgX21tX3JvdW5kX3BzKFgsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3JvdW5kcHMoKF9fdjRzZikoX19tMTI4KShYKSwgKE0pKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRfc3MoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfcm91bmRzcygoX192NHNmKShfX20xMjgpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKShfX20xMjgpKFkpLCAoTSkpOyB9KQorCisjZGVmaW5lIF9tbV9yb3VuZF9wZChYLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfcm91bmRwZCgoX192MmRmKShfX20xMjhkKShYKSwgKE0pKTsgfSkKKworI2RlZmluZSBfbW1fcm91bmRfc2QoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3JvdW5kc2QoKF9fdjJkZikoX19tMTI4ZCkoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKShfX20xMjhkKShZKSwgKE0pKTsgfSkKKworLyogU1NFNCBQYWNrZWQgQmxlbmRpbmcgSW50cmluc2ljcy4gICovCisjZGVmaW5lIF9tbV9ibGVuZF9wZChWMSwgVjIsIE0pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4ZClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192MmRmKShfX20xMjhkKShWMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkZikoX19tMTI4ZCkoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMSkgPyAyIDogMCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAyKSA/IDMgOiAxKSk7IH0pCisKKyNkZWZpbmUgX21tX2JsZW5kX3BzKFYxLCBWMiwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZikoX19tMTI4KShWMSksIChfX3Y0c2YpKF9fbTEyOCkoVjIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDAxKSA/IDQgOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKE0pICYgMHgwMikgPyA1IDogMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gNiA6IDIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoTSkgJiAweDA4KSA/IDcgOiAzKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYmxlbmR2X3BkIChfX20xMjhkIF9fVjEsIF9fbTEyOGQgX19WMiwgX19tMTI4ZCBfX00pCit7CisgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfYmxlbmR2cGQgKChfX3YyZGYpX19WMSwgKF9fdjJkZilfX1YyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRmKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9ibGVuZHZfcHMgKF9fbTEyOCBfX1YxLCBfX20xMjggX19WMiwgX19tMTI4IF9fTSkKK3sKKyAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2JsZW5kdnBzICgoX192NHNmKV9fVjEsIChfX3Y0c2YpX19WMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNmKV9fTSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYmxlbmR2X2VwaTggKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyLCBfX20xMjhpIF9fTSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wYmxlbmR2YjEyOCAoKF9fdjE2cWkpX19WMSwgKF9fdjE2cWkpX19WMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpX19NKTsKK30KKworI2RlZmluZSBfbW1fYmxlbmRfZXBpMTYoVjEsIFYyLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSkoX19tMTI4aSkoVjEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKFYyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDEpID8gIDggOiAwKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDIpID8gIDkgOiAxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDQpID8gMTAgOiAyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MDgpID8gMTEgOiAzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MTApID8gMTIgOiA0KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4MjApID8gMTMgOiA1KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4NDApID8gMTQgOiA2KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChNKSAmIDB4ODApID8gMTUgOiA3KSk7IH0pCisKKy8qIFNTRTQgRHdvcmQgTXVsdGlwbHkgSW5zdHJ1Y3Rpb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bGxvX2VwaTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSAoKF9fdjRzaSlfX1YxICogKF9fdjRzaSlfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsX2VwaTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbXVsZHExMjggKChfX3Y0c2kpX19WMSwgKF9fdjRzaSlfX1YyKTsKK30KKworLyogU1NFNCBGbG9hdGluZyBQb2ludCBEb3QgUHJvZHVjdCBJbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBfbW1fZHBfcHMoWCwgWSwgTSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2RwcHMoKF9fdjRzZikoX19tMTI4KShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2YpKF9fbTEyOCkoWSksIChNKSk7IH0pCisKKyNkZWZpbmUgX21tX2RwX3BkKFgsIFksIE0pIF9fZXh0ZW5zaW9uX18gKHtcCisgIChfX20xMjhkKSBfX2J1aWx0aW5faWEzMl9kcHBkKChfX3YyZGYpKF9fbTEyOGQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCAoTSkpOyB9KQorCisvKiBTU0U0IFN0cmVhbWluZyBMb2FkIEhpbnQgSW5zdHJ1Y3Rpb24uICAqLworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RyZWFtX2xvYWRfc2kxMjggKF9fbTEyOGkgY29uc3QgKl9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9tb3ZudGRxYSAoKGNvbnN0IF9fdjJkaSAqKSBfX1YpOworfQorCisvKiBTU0U0IFBhY2tlZCBJbnRlZ2VyIE1pbi9NYXggSW5zdHJ1Y3Rpb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcGk4IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWluc2IxMjggKChfX3YxNnFpKSBfX1YxLCAoX192MTZxaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcGk4IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4c2IxMjggKChfX3YxNnFpKSBfX1YxLCAoX192MTZxaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9lcHUxNiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1pbnV3MTI4ICgoX192OGhpKSBfX1YxLCAoX192OGhpKSBfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X2VwdTE2IChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWF4dXcxMjggKChfX3Y4aGkpIF9fVjEsIChfX3Y4aGkpIF9fVjIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyAgX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fZXBpMzIgKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BtaW5zZDEyOCAoKF9fdjRzaSkgX19WMSwgKF9fdjRzaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcGkzMiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHNkMTI4ICgoX192NHNpKSBfX1YxLCAoX192NHNpKSBfX1YyKTsKK30KKworc3RhdGljIF9faW5saW5lX18gIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX2VwdTMyIChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbWludWQxMjgoKF9fdjRzaSkgX19WMSwgKF9fdjRzaSkgX19WMik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fICBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9lcHUzMiAoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1heHVkMTI4KChfX3Y0c2kpIF9fVjEsIChfX3Y0c2kpIF9fVjIpOworfQorCisvKiBTU0U0IEluc2VydGlvbiBhbmQgRXh0cmFjdGlvbiBmcm9tIFhNTSBSZWdpc3RlciBJbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBfbW1faW5zZXJ0X3BzKFgsIFksIE4pIF9fYnVpbHRpbl9pYTMyX2luc2VydHBzMTI4KChYKSwgKFkpLCAoTikpCisjZGVmaW5lIF9tbV9leHRyYWN0X3BzKFgsIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IHVuaW9uIHsgaW50IF9faTsgZmxvYXQgX19mOyB9IF9fdDsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdjRzZiBfX2EgPSAoX192NHNmKShfX20xMjgpKFgpOyAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3QuX19mID0gX19hWyhOKSAmIDNdOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Ll9faTt9KSkKKworLyogTWlzY2VsbGFuZW91cyBpbnNlcnQgYW5kIGV4dHJhY3QgbWFjcm9zLiAgKi8KKy8qIEV4dHJhY3QgYSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0IGZyb20gWCBhdCBpbmRleCBOIGludG8gRC4gICovCisjZGVmaW5lIF9NTV9FWFRSQUNUX0ZMT0FUKEQsIFgsIE4pIChfX2V4dGVuc2lvbl9fICh7IF9fdjRzZiBfX2EgPSAoX192NHNmKShYKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEKSA9IF9fYVtOXTsgfSkpCisKKy8qIE9yIHRvZ2V0aGVyIDIgc2V0cyBvZiBpbmRleGVzIChYIGFuZCBZKSB3aXRoIHRoZSB6ZXJvaW5nIGJpdHMgKFopIHRvIGNyZWF0ZQorICAgYW4gaW5kZXggc3VpdGFibGUgZm9yIF9tbV9pbnNlcnRfcHMuICAqLworI2RlZmluZSBfTU1fTUtfSU5TRVJUUFNfTkRYKFgsIFksIFopICgoKFgpIDw8IDYpIHwgKChZKSA8PCA0KSB8IChaKSkKKworLyogRXh0cmFjdCBhIGZsb2F0IGZyb20gWCBhdCBpbmRleCBOIGludG8gdGhlIGZpcnN0IGluZGV4IG9mIHRoZSByZXR1cm4uICAqLworI2RlZmluZSBfTU1fUElDS19PVVRfUFMoWCwgTikgX21tX2luc2VydF9wcyAoX21tX3NldHplcm9fcHMoKSwgKFgpLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NTV9NS19JTlNFUlRQU19ORFgoKE4pLCAwLCAweDBlKSkKKworLyogSW5zZXJ0IGludCBpbnRvIHBhY2tlZCBpbnRlZ2VyIGFycmF5IGF0IGluZGV4LiAgKi8KKyNkZWZpbmUgX21tX2luc2VydF9lcGk4KFgsIEksIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IF9fdjE2cWkgX19hID0gKF9fdjE2cWkpKF9fbTEyOGkpKFgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDE1XSA9IChJKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2E7fSkpCisjZGVmaW5lIF9tbV9pbnNlcnRfZXBpMzIoWCwgSSwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBfX3Y0c2kgX19hID0gKF9fdjRzaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDNdID0gKEkpOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYTt9KSkKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9pbnNlcnRfZXBpNjQoWCwgSSwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBfX3YyZGkgX19hID0gKF9fdjJkaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hWyhOKSAmIDFdID0gKEkpOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYTt9KSkKKyNlbmRpZiAvKiBfX3g4Nl82NF9fICovCisKKy8qIEV4dHJhY3QgaW50IGZyb20gcGFja2VkIGludGVnZXIgYXJyYXkgYXQgaW5kZXguICBUaGlzIHJldHVybnMgdGhlIGVsZW1lbnQKKyAqIGFzIGEgemVybyBleHRlbmRlZCB2YWx1ZSwgc28gaXQgaXMgdW5zaWduZWQuCisgKi8KKyNkZWZpbmUgX21tX2V4dHJhY3RfZXBpOChYLCBOKSAoX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgX192MTZxaSBfX2EgPSAoX192MTZxaSkoX19tMTI4aSkoWCk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkodW5zaWduZWQgY2hhcikgX19hWyhOKSAmIDE1XTt9KSkKKyNkZWZpbmUgX21tX2V4dHJhY3RfZXBpMzIoWCwgTikgKF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsgX192NHNpIF9fYSA9IChfX3Y0c2kpKF9fbTEyOGkpKFgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KV9fYVsoTikgJiAzXTt9KSkKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9tbV9leHRyYWN0X2VwaTY0KFgsIE4pIChfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7IF9fdjJkaSBfX2EgPSAoX192MmRpKShfX20xMjhpKShYKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylfX2FbKE4pICYgMV07fSkpCisjZW5kaWYgLyogX194ODZfNjQgKi8KKworLyogU1NFNCAxMjgtYml0IFBhY2tlZCBJbnRlZ2VyIENvbXBhcmlzb25zLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV90ZXN0el9zaTEyOChfX20xMjhpIF9fTSwgX19tMTI4aSBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdHoxMjgoKF9fdjJkaSlfX00sIChfX3YyZGkpX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Rlc3RjX3NpMTI4KF9fbTEyOGkgX19NLCBfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3B0ZXN0YzEyOCgoX192MmRpKV9fTSwgKF9fdjJkaSlfX1YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdGVzdG56Y19zaTEyOChfX20xMjhpIF9fTSwgX19tMTI4aSBfX1YpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9wdGVzdG56YzEyOCgoX192MmRpKV9fTSwgKF9fdjJkaSlfX1YpOworfQorCisjZGVmaW5lIF9tbV90ZXN0X2FsbF9vbmVzKFYpIF9tbV90ZXN0Y19zaTEyOCgoViksIF9tbV9jbXBlcV9lcGkzMigoViksIChWKSkpCisjZGVmaW5lIF9tbV90ZXN0X21peF9vbmVzX3plcm9zKE0sIFYpIF9tbV90ZXN0bnpjX3NpMTI4KChNKSwgKFYpKQorI2RlZmluZSBfbW1fdGVzdF9hbGxfemVyb3MoTSwgVikgX21tX3Rlc3R6X3NpMTI4ICgoTSksIChWKSkKKworLyogU1NFNCA2NC1iaXQgUGFja2VkIEludGVnZXIgQ29tcGFyaXNvbnMuICAqLworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBlcV9lcGk2NChfX20xMjhpIF9fVjEsIF9fbTEyOGkgX19WMikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSgoX192MmRpKV9fVjEgPT0gKF9fdjJkaSlfX1YyKTsKK30KKworLyogU1NFNCBQYWNrZWQgSW50ZWdlciBTaWduLUV4dGVuc2lvbi4gICovCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpMTYoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpLCBfX3Y4aGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpMzIoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEsIDIsIDMpLCBfX3Y0c2kpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaThfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHBlcmZvcm1zIGEgc2lnbmVkIGV4dGVuc2lvbiwgYnV0IF9fdjE2cWkgaXMgYSBjaGFyCisgICAgIHdoaWNoIG1heSBiZSBzaWduZWQgb3IgdW5zaWduZWQsIHNvIHVzZSBfX3YxNnFzLiAqLworICB0eXBlZGVmIHNpZ25lZCBjaGFyIF9fdjE2cXMgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjE2cXMpX19WLCAoX192MTZxcylfX1YsIDAsIDEpLCBfX3YyZGkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwaTE2X2VwaTMyKF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjhoaSlfX1YsIChfX3Y4aGkpX19WLCAwLCAxLCAyLCAzKSwgX192NHNpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcGkxNl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKChfX3Y4aGkpX19WLCAoX192OGhpKV9fViwgMCwgMSksIF9fdjJkaSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXBpMzJfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcigoX192NHNpKV9fViwgKF9fdjRzaSlfX1YsIDAsIDEpLCBfX3YyZGkpOworfQorCisvKiBTU0U0IFBhY2tlZCBJbnRlZ2VyIFplcm8tRXh0ZW5zaW9uLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1OF9lcGkxNihfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enhidzEyOCgoX192MTZxaSkgX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcHU4X2VwaTMyKF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJkMTI4KChfX3YxNnFpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1OF9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enhicTEyOCgoX192MTZxaSlfX1YpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dGVwdTE2X2VwaTMyKF9fbTEyOGkgX19WKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdkMTI4KChfX3Y4aGkpX19WKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRlcHUxNl9lcGk2NChfX20xMjhpIF9fVikKK3sKKyAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9wbW92enh3cTEyOCgoX192OGhpKV9fVik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0ZXB1MzJfZXBpNjQoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcG1vdnp4ZHExMjgoKF9fdjRzaSlfX1YpOworfQorCisvKiBTU0U0IFBhY2sgd2l0aCBVbnNpZ25lZCBTYXR1cmF0aW9uLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGFja3VzX2VwaTMyKF9fbTEyOGkgX19WMSwgX19tMTI4aSBfX1YyKQoreworICByZXR1cm4gKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c2R3MTI4KChfX3Y0c2kpX19WMSwgKF9fdjRzaSlfX1YyKTsKK30KKworLyogU1NFNCBNdWx0aXBsZSBQYWNrZWQgU3VtcyBvZiBBYnNvbHV0ZSBEaWZmZXJlbmNlLiAgKi8KKyNkZWZpbmUgX21tX21wc2FkYndfZXB1OChYLCBZLCBNKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpIF9fYnVpbHRpbl9pYTMyX21wc2FkYncxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShZKSwgKE0pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5wb3NfZXB1MTYoX19tMTI4aSBfX1YpCit7CisgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfcGhtaW5wb3N1dzEyOCgoX192OGhpKV9fVik7Cit9CisKKy8qIEhhbmRsZSB0aGUgc3NlNC4yIGRlZmluaXRpb25zIGhlcmUuICovCisKKy8qIFRoZXNlIGRlZmluaXRpb25zIGFyZSBub3JtYWxseSBpbiBubW1pbnRyaW4uaCwgYnV0IGdjYyBwdXRzIHRoZW0gaW4gaGVyZQorICAgc28gd2UnbGwgZG8gdGhlIHNhbWUuICAqLworCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInNzZTQuMiIpKSkKKworLyogVGhlc2Ugc3BlY2lmeSB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgd2UncmUgY29tcGFyaW5nLiAgKi8KKyNkZWZpbmUgX1NJRERfVUJZVEVfT1BTICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIF9TSUREX1VXT1JEX09QUyAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBfU0lERF9TQllURV9PUFMgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgX1NJRERfU1dPUkRfT1BTICAgICAgICAgICAgICAgICAweDAzCisKKy8qIFRoZXNlIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29tcGFyaXNvbiBvcGVyYXRpb24uICAqLworI2RlZmluZSBfU0lERF9DTVBfRVFVQUxfQU5ZICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgX1NJRERfQ01QX1JBTkdFUyAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIF9TSUREX0NNUF9FUVVBTF9FQUNIICAgICAgICAgICAgMHgwOAorI2RlZmluZSBfU0lERF9DTVBfRVFVQUxfT1JERVJFRCAgICAgICAgIDB4MGMKKworLyogVGhlc2UgbWFjcm9zIHNwZWNpZnkgdGhlIHBvbGFyaXR5IG9mIHRoZSBvcGVyYXRpb24uICAqLworI2RlZmluZSBfU0lERF9QT1NJVElWRV9QT0xBUklUWSAgICAgICAgIDB4MDAKKyNkZWZpbmUgX1NJRERfTkVHQVRJVkVfUE9MQVJJVFkgICAgICAgICAweDEwCisjZGVmaW5lIF9TSUREX01BU0tFRF9QT1NJVElWRV9QT0xBUklUWSAgMHgyMAorI2RlZmluZSBfU0lERF9NQVNLRURfTkVHQVRJVkVfUE9MQVJJVFkgIDB4MzAKKworLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGluIF9tbV9jbXBYc3RyaSgpIHRvIHNwZWNpZnkgdGhlIHJldHVybi4gICovCisjZGVmaW5lIF9TSUREX0xFQVNUX1NJR05JRklDQU5UICAgICAgICAgMHgwMAorI2RlZmluZSBfU0lERF9NT1NUX1NJR05JRklDQU5UICAgICAgICAgIDB4NDAKKworLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGluIF9tbV9jbXBYc3RyaSgpIHRvIHNwZWNpZnkgdGhlIHJldHVybi4gICovCisjZGVmaW5lIF9TSUREX0JJVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBfU0lERF9VTklUX01BU0sgICAgICAgICAgICAgICAgIDB4NDAKKworLyogU1NFNC4yIFBhY2tlZCBDb21wYXJpc29uIEludHJpbnNpY3MuICAqLworI2RlZmluZSBfbW1fY21waXN0cm0oQSwgQiwgTSkgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY21waXN0cm0xMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MTZxaSkoX19tMTI4aSkoQiksIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21waXN0cmkoQSwgQiwgTSkgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBpc3RyaTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShNKSkKKworI2RlZmluZSBfbW1fY21wZXN0cm0oQSwgTEEsIEIsIExCLCBNKSBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RybTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIChpbnQpKExBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKEIpLCAoaW50KShMQiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorI2RlZmluZSBfbW1fY21wZXN0cmkoQSwgTEEsIEIsIExCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGVzdHJpMTI4KChfX3YxNnFpKShfX20xMjhpKShBKSwgKGludCkoTEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKE0pKQorCisvKiBTU0U0LjIgUGFja2VkIENvbXBhcmlzb24gSW50cmluc2ljcyBhbmQgRUZsYWcgUmVhZGluZy4gICovCisjZGVmaW5lIF9tbV9jbXBpc3RyYShBLCBCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpYTEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCisjZGVmaW5lIF9tbV9jbXBpc3RyYyhBLCBCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpYzEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCisjZGVmaW5lIF9tbV9jbXBpc3RybyhBLCBCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpbzEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCisjZGVmaW5lIF9tbV9jbXBpc3RycyhBLCBCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpczEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCisjZGVmaW5lIF9tbV9jbXBpc3RyeihBLCBCLCBNKSBcCisgIChpbnQpX19idWlsdGluX2lhMzJfcGNtcGlzdHJpejEyOCgoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTSkpCisKKyNkZWZpbmUgX21tX2NtcGVzdHJhKEEsIExBLCBCLCBMQiwgTSkgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaWExMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGVzdHJjKEEsIExBLCBCLCBMQiwgTSkgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaWMxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGVzdHJvKEEsIExBLCBCLCBMQiwgTSkgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaW8xMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGVzdHJzKEEsIExBLCBCLCBMQiwgTSkgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaXMxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKKyNkZWZpbmUgX21tX2NtcGVzdHJ6KEEsIExBLCBCLCBMQiwgTSkgXAorICAoaW50KV9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaXoxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKEEpLCAoaW50KShMQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKGludCkoTEIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShNKSkKKworLyogU1NFNC4yIENvbXBhcmUgUGFja2VkIERhdGEgLS0gR3JlYXRlciBUaGFuLiAgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfZXBpNjQoX19tMTI4aSBfX1YxLCBfX20xMjhpIF9fVjIpCit7CisgIHJldHVybiAoX19tMTI4aSkoKF9fdjJkaSlfX1YxID4gKF9fdjJkaSlfX1YyKTsKK30KKworLyogU1NFNC4yIEFjY3VtdWxhdGUgQ1JDMzIuICAqLworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NyYzMyX3U4KHVuc2lnbmVkIGludCBfX0MsIHVuc2lnbmVkIGNoYXIgX19EKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3JjMzJxaShfX0MsIF9fRCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jcmMzMl91MTYodW5zaWduZWQgaW50IF9fQywgdW5zaWduZWQgc2hvcnQgX19EKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3JjMzJoaShfX0MsIF9fRCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jcmMzMl91MzIodW5zaWduZWQgaW50IF9fQywgdW5zaWduZWQgaW50IF9fRCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NyYzMyc2koX19DLCBfX0QpOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NyYzMyX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgX19DLCB1bnNpZ25lZCBsb25nIGxvbmcgX19EKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3JjMzJkaShfX0MsIF9fRCk7Cit9CisjZW5kaWYgLyogX194ODZfNjRfXyAqLworCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNpZmRlZiBfX1BPUENOVF9fCisjaW5jbHVkZSA8cG9wY250aW50cmluLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9TTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRhbGlnbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRhbGlnbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzhkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGFsaWduLmgKQEAgLTAsMCArMSwzNSBAQAorLyo9PT0tLS0tIHN0ZGFsaWduLmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIGFsaWdubWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19TVERBTElHTl9ICisjZGVmaW5lIF9fU1REQUxJR05fSAorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIGFsaWduYXMgX0FsaWduYXMKKyNkZWZpbmUgYWxpZ25vZiBfQWxpZ25vZgorI2VuZGlmCisKKyNkZWZpbmUgX19hbGlnbmFzX2lzX2RlZmluZWQgMQorI2RlZmluZSBfX2FsaWdub2ZfaXNfZGVmaW5lZCAxCisKKyNlbmRpZiAvKiBfX1NUREFMSUdOX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYXJnLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGFyZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1N2UxODMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGFyZy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qPT09LS0tLSBzdGRhcmcuaCAtIFZhcmlhYmxlIGFyZ3VtZW50IGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRWxpIEZyaWVkbWFuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fU1REQVJHX0gKKyNkZWZpbmUgX19TVERBUkdfSAorCisjaWZuZGVmIF9WQV9MSVNUCit0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IHZhX2xpc3Q7CisjZGVmaW5lIF9WQV9MSVNUCisjZW5kaWYKKyNkZWZpbmUgdmFfc3RhcnQoYXAsIHBhcmFtKSBfX2J1aWx0aW5fdmFfc3RhcnQoYXAsIHBhcmFtKQorI2RlZmluZSB2YV9lbmQoYXApICAgICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXApCisjZGVmaW5lIHZhX2FyZyhhcCwgdHlwZSkgICAgX19idWlsdGluX3ZhX2FyZyhhcCwgdHlwZSkKKworLyogR0NDIGFsd2F5cyBkZWZpbmVzIF9fdmFfY29weSwgYnV0IGRvZXMgbm90IGRlZmluZSB2YV9jb3B5IHVubGVzcyBpbiBjOTkgbW9kZQorICogb3IgLWFuc2kgaXMgbm90IHNwZWNpZmllZCwgc2luY2UgaXQgd2FzIG5vdCBwYXJ0IG9mIEM5MC4KKyAqLworI2RlZmluZSBfX3ZhX2NvcHkoZCxzKSBfX2J1aWx0aW5fdmFfY29weShkLHMpCisKKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgfHwgX19jcGx1c3BsdXMgPj0gMjAxMTAzTCB8fCAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisjZGVmaW5lIHZhX2NvcHkoZGVzdCwgc3JjKSAgX19idWlsdGluX3ZhX2NvcHkoZGVzdCwgc3JjKQorI2VuZGlmCisKKy8qIEhhY2sgcmVxdWlyZWQgdG8gbWFrZSBzdGFuZGFyZCBoZWFkZXJzIHdvcmssIGF0IGxlYXN0IG9uIFVidW50dSAqLworI2lmbmRlZiBfX0dOVUNfVkFfTElTVAorI2RlZmluZSBfX0dOVUNfVkFfTElTVCAxCisjZW5kaWYKK3R5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CisKKyNlbmRpZiAvKiBfX1NUREFSR19IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGF0b21pYy5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRhdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzRmMWNlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRhdG9taWMuaApAQCAtMCwwICsxLDU4MiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgRWQgU2Nob3V0ZW4gPGVkQEZyZWVCU0Qub3JnPgorICogICAgICAgICAgICAgICAgICAgIERhdmlkIENoaXNuYWxsIDx0aGVyYXZlbkBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBfU1REQVRPTUlDX0hfCisjZGVmaW5lCV9TVERBVE9NSUNfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19HTlVDX1BSRVJFUSkKKy8qIER1cGxpY2F0ZSBkZWZpbml0aW9uIGhlcmUsIHNpbmNlIHRoZSBtaW5ndyBzeXMvY2RlZnMuaCBvbWl0cyB0aGUgICovCisvKiBkZWZpbml0aW9uLCBhbmQgdGhpcyBuZWVkcyB0byBiZSB1c2FibGUgdGhlcmUuICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZQlfX0dOVUNfUFJFUkVRKHgsIHkpICAgIFwKKwkoKF9fR05VQ19fID09ICh4KSAmJiBfX0dOVUNfTUlOT1JfXyA+PSAoeSkpIHx8IChfX0dOVUNfXyA+ICh4KSkpCisjZW5kaWYgLyogX19HTlVDX18gJiYgLi4uICovCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMICYmIGRlZmluZWQoX1VTSU5HX0xJQkNYWCkKKyMgaWZkZWYgX19jbGFuZ19fCisjICBpZiBfX2hhc19mZWF0dXJlKGN4eF9hdG9taWMpCisjICAgZGVmaW5lIF9TVERBVE9NSUNfSEFWRV9BVE9NSUMKKyMgIGVuZGlmCisjIGVsc2UgLyogZ2NjICovCisjICBpZiBfX0dOVUNfUFJFUkVRKDQsIDcpCisjICAgZGVmaW5lIF9TVERBVE9NSUNfSEFWRV9BVE9NSUMKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9TVERBVE9NSUNfSEFWRV9BVE9NSUMKKworLyogV2UgaGF2ZSBhIHVzYWJsZSBDKysgPGF0b21pYz47IHVzZSBpdCBpbnN0ZWFkLiAgKi8KKworI2luY2x1ZGUgPGF0b21pYz4KKworI3VuZGVmIF9BdG9taWMKKyAgICAgICAgLyogQWxzbyBkZWZpbmVkIGJ5IDxhdG9taWM+IGZvciBnY2MuICBCdXQgbm90IHVzZWQgaW4gbWFjcm9zLiAqLworICAgICAgICAvKiBBbHNvIGEgY2xhbmcgaW50cmluc2ljLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIFNob3VsZCBub3QgYmUgdXNlZCBieSBjbGllbnQgY29kZSBiZWZvcmUgdGhpcyBmaWxlIGlzICAgICAgKi8KKyAgICAgICAgLyogaW5jbHVkZWQuICBUaGUgZGVmaW5pdGlvbnMgaW4gPGF0b21pYz4gdGhlbXNlbHZlcyBzZWUgICAgICAqLworICAgICAgICAvKiB0aGUgb2xkIGRlZmluaXRpb24sIGFzIHRoZXkgc2hvdWxkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIENsaWVudCBjb2RlIHNlZXMgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBfQXRvbWljKHQpIHN0ZDo6YXRvbWljPHQ+CisKK3VzaW5nIHN0ZDo6YXRvbWljX2lzX2xvY2tfZnJlZTsKK3VzaW5nIHN0ZDo6YXRvbWljX2luaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19zdG9yZTsKK3VzaW5nIHN0ZDo6YXRvbWljX3N0b3JlX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfbG9hZDsKK3VzaW5nIHN0ZDo6YXRvbWljX2xvYWRfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19leGNoYW5nZTsKK3VzaW5nIHN0ZDo6YXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmc7Cit1c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhazsKK3VzaW5nIHN0ZDo6YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX2FkZDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX3N1YjsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX29yOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF94b3I7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF94b3JfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hbmQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY190aHJlYWRfZmVuY2U7Cit1c2luZyBzdGQ6OmF0b21pY19zaWduYWxfZmVuY2U7CisKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZDsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWU7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZTsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWw7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0OworCit1c2luZyBzdGQ6OmF0b21pY19ib29sOwordXNpbmcgc3RkOjphdG9taWNfY2hhcjsKK3VzaW5nIHN0ZDo6YXRvbWljX3NjaGFyOwordXNpbmcgc3RkOjphdG9taWNfdWNoYXI7Cit1c2luZyBzdGQ6OmF0b21pY19zaG9ydDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VzaG9ydDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnQ7Cit1c2luZyBzdGQ6OmF0b21pY19sb25nOwordXNpbmcgc3RkOjphdG9taWNfdWxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY19sbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX3VsbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXIxNl90OwordXNpbmcgc3RkOjphdG9taWNfY2hhcjMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY193Y2hhcl90OwordXNpbmcgc3RkOjphdG9taWNfaW50X2xlYXN0OF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDE2X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0MTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0MzJfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDY0X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0NjRfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0OF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0OF90OwordXNpbmcgc3RkOjphdG9taWNfaW50X2Zhc3QxNl90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0MTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0MzJfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDY0X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2Zhc3Q2NF90OwordXNpbmcgc3RkOjphdG9taWNfaW50cHRyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50cHRyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19zaXplX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19wdHJkaWZmX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRtYXhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRtYXhfdDsKKworI2Vsc2UgLyogPGF0b21pYz4gdW5hdmFpbGFibGUsIHBvc3NpYmx5IGJlY2F1c2UgdGhpcyBpcyBDLCBub3QgQysrICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKy8qCisgKiBDOiBEbyBpdCBvdXJzZWx2ZXMuCisgKiBOb3RlIHRoYXQgdGhlIHJ1bnRpbWUgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBoZXJlIHNob3VsZCBiZSBjb21wYXRpYmxlCisgKiB3aXRoIHRoZSBDKysgb25lLCBpLmUuIGFuIF9BdG9taWMoVCkgbmVlZHMgdG8gY29udGFpbiB0aGUgc2FtZQorICogYml0cyBhcyBhIFQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPiAgLyogRm9yIHB0cmRpZmZfdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaW5jbHVkZSA8c3RkaW50Lmg+ICAvKiBUT0RPOiBTaG91bGQgcG9sbHV0ZSBuYW1lc3BhY2UgbGVzcy4gICAgKi8KKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwKKyMgaW5jbHVkZSA8dWNoYXIuaD4gIC8qIEZvciBjaGFyMTZfdCBhbmQgY2hhcjMyX3QuICAgICAgICAgICAgICAqLworI2VuZGlmCisKKyNpZmRlZiBfX2NsYW5nX18KKyMgaWYgX19oYXNfZXh0ZW5zaW9uKGNfYXRvbWljKSB8fCBfX2hhc19leHRlbnNpb24oY3h4X2F0b21pYykKKyMgIGRlZmluZSAgICAgICBfX0NMQU5HX0FUT01JQ1MKKyMgZWxzZQorIyAgZXJyb3IgInN0ZGF0b21pYy5oIGRvZXMgbm90IHN1cHBvcnQgeW91ciBjb21waWxlciIKKyMgZW5kaWYKKyMgaWYgX19oYXNfYnVpbHRpbihfX3N5bmNfc3dhcCkKKyMgIGRlZmluZSBfX0hBU19CVUlMVElOX1NZTkNfU1dBUAorIyBlbmRpZgorI2Vsc2UKKyMgaWYgX19HTlVDX1BSRVJFUSg0LCA3KQorIyAgZGVmaW5lCV9fR05VQ19BVE9NSUNTCisjIGVsc2UKKyMgIGRlZmluZQlfX1NZTkNfQVRPTUlDUworIyAgaWZkZWYgX19jcGx1c3BsdXMKKyMgICBkZWZpbmUgICAgICAgX19BVE9NSUNTX0FWT0lEX0RPVF9JTklUCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiA3LjE3LjEgQXRvbWljIGxvY2stZnJlZSBtYWNyb3MuCisgKi8KKworI2lmZGVmIF9fR0NDX0FUT01JQ19CT09MX0xPQ0tfRlJFRQorI2RlZmluZQlBVE9NSUNfQk9PTF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19CT09MX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX0JPT0xfTE9DS19GUkVFICAgICAgICAgICAyIC8qIEZvciBhbGwgbW9kZXJuIHBsYXRmb3JtcyAqLworI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX0NIQVJfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19DSEFSX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0NIQVJfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfQ0hBUl9MT0NLX0ZSRUUgICAgICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRQorI2RlZmluZQlBVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUJX19HQ0NfQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUgICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRSAgICAgICAgICAyCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfSU5UX0xPQ0tfRlJFRQorI2RlZmluZQlBVE9NSUNfSU5UX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0lOVF9MT0NLX0ZSRUUKKyNlbGlmIGRlZmluZWQoX19TWU5DX0FUT01JQ1MpCisjZGVmaW5lCUFUT01JQ19JTlRfTE9DS19GUkVFICAgICAgICAgICAgMgorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX0xPTkdfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19MT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xPTkdfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfTE9OR19MT0NLX0ZSRUUgICAgICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRSAgICAgICAgICAxIC8qIG1heWJlICovCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFCV9fR0NDX0FUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFICAgICAgICAyCisjZW5kaWYKKworLyoKKyAqIDcuMTcuMiBJbml0aWFsaXphdGlvbi4KKyAqLworCisjaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCSh2YWx1ZSkKKyNkZWZpbmUJYXRvbWljX2luaXQob2JqLCB2YWx1ZSkJCV9fYzExX2F0b21pY19pbml0KG9iaiwgdmFsdWUpCisjZWxzZQorI2lmZGVmIF9fQVRPTUlDU19BVk9JRF9ET1RfSU5JVAorI2RlZmluZQlBVE9NSUNfVkFSX0lOSVQodmFsdWUpCQl7IHZhbHVlIH0KKyNlbHNlCisjZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCXsgLl9fdmFsID0gKHZhbHVlKSB9CisjZW5kaWYKKyNkZWZpbmUJYXRvbWljX2luaXQob2JqLCB2YWx1ZSkJCSgodm9pZCkoKG9iaiktPl9fdmFsID0gKHZhbHVlKSkpCisjZW5kaWYKKworLyoKKyAqIENsYW5nIGFuZCByZWNlbnQgR0NDIGJvdGggcHJvdmlkZSBwcmVkZWZpbmVkIG1hY3JvcyBmb3IgdGhlIG1lbW9yeQorICogb3JkZXJpbmdzLiAgSWYgd2UgYXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2Vzbid0IGRlZmluZSB0aGVtLCB1c2UgdGhlCisgKiBjbGFuZyB2YWx1ZXMgLSB0aGVzZSB3aWxsIGJlIGlnbm9yZWQgaW4gdGhlIGZhbGxiYWNrIHBhdGguCisgKi8KKworI2lmbmRlZiBfX0FUT01JQ19SRUxBWEVECisjZGVmaW5lIF9fQVRPTUlDX1JFTEFYRUQJCTAKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19DT05TVU1FCisjZGVmaW5lIF9fQVRPTUlDX0NPTlNVTUUJCTEKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19BQ1FVSVJFCisjZGVmaW5lIF9fQVRPTUlDX0FDUVVJUkUJCTIKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19SRUxFQVNFCisjZGVmaW5lIF9fQVRPTUlDX1JFTEVBU0UJCTMKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19BQ1FfUkVMCisjZGVmaW5lIF9fQVRPTUlDX0FDUV9SRUwJCTQKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19TRVFfQ1NUCisjZGVmaW5lIF9fQVRPTUlDX1NFUV9DU1QJCTUKKyNlbmRpZgorCisvKgorICogNy4xNy4zIE9yZGVyIGFuZCBjb25zaXN0ZW5jeS4KKyAqCisgKiBUaGUgbWVtb3J5X29yZGVyXyogY29uc3RhbnRzIHRoYXQgZGVub3RlIHRoZSBiYXJyaWVyIGJlaGF2aW91ciBvZiB0aGUKKyAqIGF0b21pYyBvcGVyYXRpb25zLgorICogVGhlIGVudW0gdmFsdWVzIG11c3QgYmUgaWRlbnRpY2FsIHRvIHRob3NlIHVzZWQgYnkgdGhlCisgKiBDKysgPGF0b21pYz4gaGVhZGVyLgorICovCisKK3R5cGVkZWYgZW51bSB7CisJbWVtb3J5X29yZGVyX3JlbGF4ZWQgPSBfX0FUT01JQ19SRUxBWEVELAorCW1lbW9yeV9vcmRlcl9jb25zdW1lID0gX19BVE9NSUNfQ09OU1VNRSwKKwltZW1vcnlfb3JkZXJfYWNxdWlyZSA9IF9fQVRPTUlDX0FDUVVJUkUsCisJbWVtb3J5X29yZGVyX3JlbGVhc2UgPSBfX0FUT01JQ19SRUxFQVNFLAorCW1lbW9yeV9vcmRlcl9hY3FfcmVsID0gX19BVE9NSUNfQUNRX1JFTCwKKwltZW1vcnlfb3JkZXJfc2VxX2NzdCA9IF9fQVRPTUlDX1NFUV9DU1QKK30gbWVtb3J5X29yZGVyOworCisvKgorICogNy4xNy40IEZlbmNlcy4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXIgX19vcmRlciBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKworI2lmZGVmIF9fQ0xBTkdfQVRPTUlDUworCV9fYzExX2F0b21pY190aHJlYWRfZmVuY2UoX19vcmRlcik7CisjZWxpZiBkZWZpbmVkKF9fR05VQ19BVE9NSUNTKQorCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX29yZGVyKTsKKyNlbHNlCisJX19zeW5jX3N5bmNocm9uaXplKCk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY19zaWduYWxfZmVuY2UobWVtb3J5X29yZGVyIF9fb3JkZXIgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisKKyNpZmRlZiBfX0NMQU5HX0FUT01JQ1MKKwlfX2MxMV9hdG9taWNfc2lnbmFsX2ZlbmNlKF9fb3JkZXIpOworI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKwlfX2F0b21pY19zaWduYWxfZmVuY2UoX19vcmRlcik7CisjZWxzZQorCV9fYXNtIHZvbGF0aWxlICgiIiA6OjogIm1lbW9yeSIpOworI2VuZGlmCit9CisKKy8qCisgKiA3LjE3LjUgTG9jay1mcmVlIHByb3BlcnR5LgorICovCisKKyNpZiBkZWZpbmVkKF9LRVJORUwpCisvKiBBdG9taWNzIGluIGtlcm5lbHNwYWNlIGFyZSBhbHdheXMgbG9jay1mcmVlLiAqLworI2RlZmluZQlhdG9taWNfaXNfbG9ja19mcmVlKG9iaikgXAorCSgodm9pZCkob2JqKSwgKF9Cb29sKTEpCisjZWxpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwlfX2MxMV9hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZigqKG9iaikpKQorI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwlfX2F0b21pY19pc19sb2NrX2ZyZWUoc2l6ZW9mKChvYmopLT5fX3ZhbCksICYob2JqKS0+X192YWwpCisjZWxzZQorI2RlZmluZQlhdG9taWNfaXNfbG9ja19mcmVlKG9iaikgXAorCSgodm9pZCkob2JqKSwgc2l6ZW9mKChvYmopLT5fX3ZhbCkgPD0gc2l6ZW9mKHZvaWQgKikpCisjZW5kaWYKKworLyoKKyAqIDcuMTcuNiBBdG9taWMgaW50ZWdlciB0eXBlcy4KKyAqLworCisjaWZuZGVmIF9fQ0xBTkdfQVRPTUlDUworLyoKKyAqIE5vIG5hdGl2ZSBzdXBwb3J0IGZvciBfQXRvbWljKCkuIFBsYWNlIG9iamVjdCBpbiBzdHJ1Y3R1cmUgdG8gcHJldmVudAorICogbW9zdCBmb3JtcyBvZiBkaXJlY3Qgbm9uLWF0b21pYyBhY2Nlc3MuCisgKi8KKyNkZWZpbmUgX0F0b21pYyhUKSAgICAgICAgICAgICAgc3RydWN0IHsgVCB2b2xhdGlsZSBfX3ZhbDsgfQorI2VuZGlmCisKK3R5cGVkZWYgX0F0b21pYyhib29sKQkJCWF0b21pY19ib29sOwordHlwZWRlZiBfQXRvbWljKGNoYXIpCQkJYXRvbWljX2NoYXI7Cit0eXBlZGVmIF9BdG9taWMoc2lnbmVkIGNoYXIpCQlhdG9taWNfc2NoYXI7Cit0eXBlZGVmIF9BdG9taWModW5zaWduZWQgY2hhcikJCWF0b21pY191Y2hhcjsKK3R5cGVkZWYgX0F0b21pYyhzaG9ydCkJCQlhdG9taWNfc2hvcnQ7Cit0eXBlZGVmIF9BdG9taWModW5zaWduZWQgc2hvcnQpCQlhdG9taWNfdXNob3J0OwordHlwZWRlZiBfQXRvbWljKGludCkJCQlhdG9taWNfaW50OwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGludCkJCWF0b21pY191aW50OwordHlwZWRlZiBfQXRvbWljKGxvbmcpCQkJYXRvbWljX2xvbmc7Cit0eXBlZGVmIF9BdG9taWModW5zaWduZWQgbG9uZykJCWF0b21pY191bG9uZzsKK3R5cGVkZWYgX0F0b21pYyhsb25nIGxvbmcpCQlhdG9taWNfbGxvbmc7Cit0eXBlZGVmIF9BdG9taWModW5zaWduZWQgbG9uZyBsb25nKQlhdG9taWNfdWxsb25nOworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHR5cGVkZWYgX0F0b21pYyhjaGFyMTZfdCkJCWF0b21pY19jaGFyMTZfdDsKKyAgdHlwZWRlZiBfQXRvbWljKGNoYXIzMl90KQkJYXRvbWljX2NoYXIzMl90OworI2VuZGlmCit0eXBlZGVmIF9BdG9taWMod2NoYXJfdCkJCWF0b21pY193Y2hhcl90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDhfdCkJCWF0b21pY19pbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDhfdCkJYXRvbWljX3VpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2xlYXN0MTZfdCkJYXRvbWljX2ludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDE2X3QpCWF0b21pY191aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3QzMl90KQlhdG9taWNfaW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2xlYXN0MzJfdCkJYXRvbWljX3VpbnRfbGVhc3QzMl90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDY0X3QpCWF0b21pY19pbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3Q2NF90KQlhdG9taWNfdWludF9sZWFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3Q4X3QpCQlhdG9taWNfaW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9mYXN0OF90KQkJYXRvbWljX3VpbnRfZmFzdDhfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfZmFzdDE2X3QpCQlhdG9taWNfaW50X2Zhc3QxNl90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDE2X3QpCWF0b21pY191aW50X2Zhc3QxNl90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0MzJfdCkJCWF0b21pY19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9mYXN0MzJfdCkJYXRvbWljX3VpbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3Q2NF90KQkJYXRvbWljX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3Q2NF90KQlhdG9taWNfdWludF9mYXN0NjRfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRwdHJfdCkJCWF0b21pY19pbnRwdHJfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50cHRyX3QpCQlhdG9taWNfdWludHB0cl90OwordHlwZWRlZiBfQXRvbWljKHNpemVfdCkJCWF0b21pY19zaXplX3Q7Cit0eXBlZGVmIF9BdG9taWMocHRyZGlmZl90KQkJYXRvbWljX3B0cmRpZmZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRtYXhfdCkJCWF0b21pY19pbnRtYXhfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50bWF4X3QpCQlhdG9taWNfdWludG1heF90OworCisvKgorICogNy4xNy43IE9wZXJhdGlvbnMgb24gYXRvbWljIHR5cGVzLgorICovCisKKy8qCisgKiBDb21waWxlci1zcGVjaWZpYyBvcGVyYXRpb25zLgorICovCisKKyNpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKKwlfX2MxMV9hdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCwJXAorCSAgICBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayhvYmplY3QsIGV4cGVjdGVkLCBkZXNpcmVkLAlcCisJICAgIHN1Y2Nlc3MsIGZhaWx1cmUpCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19leGNoYW5nZShvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX2FkZChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX2FuZChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfb3Iob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9zdWIob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF94b3Iob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAorCV9fYzExX2F0b21pY19sb2FkKG9iamVjdCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19zdG9yZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJCVwKKwlfX2MxMV9hdG9taWNfc3RvcmUob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGV4cGVjdGVkLAkJXAorCSAgICBkZXNpcmVkLCAwLCBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGV4cGVjdGVkLAkJXAorCSAgICBkZXNpcmVkLCAxLCBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKKwlfX2F0b21pY19leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGRlc2lyZWQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfYWRkKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfYW5kKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF9vcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX3N1YigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX3hvcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAorCV9fYXRvbWljX2xvYWRfbigmKG9iamVjdCktPl9fdmFsLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQkJXAorCV9fYXRvbWljX3N0b3JlX24oJihvYmplY3QpLT5fX3ZhbCwgZGVzaXJlZCwgb3JkZXIpCisjZWxzZQorI2RlZmluZQlfX2F0b21pY19hcHBseV9zdHJpZGUob2JqZWN0LCBvcGVyYW5kKSBcCisJKCgoX190eXBlb2ZfXygob2JqZWN0KS0+X192YWwpKTApICsgKG9wZXJhbmQpKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCV9fZXh0ZW5zaW9uX18gKHsJCQlcCisJX190eXBlb2ZfXyhleHBlY3RlZCkgX19lcCA9IChleHBlY3RlZCk7CQkJCVwKKwlfX3R5cGVvZl9fKCpfX2VwKSBfX2UgPSAqX19lcDsJCQkJCVwKKwkodm9pZCkoc3VjY2Vzcyk7ICh2b2lkKShmYWlsdXJlKTsJCQkJXAorCShib29sKSgoKl9fZXAgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJihvYmplY3QpLT5fX3ZhbCwJXAorCSAgICBfX2UsIGRlc2lyZWQpKSA9PSBfX2UpOwkJCQkJXAorfSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisJCWRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCisjaWZkZWYgX19IQVNfQlVJTFRJTl9TWU5DX1NXQVAKKy8qIENsYW5nIHByb3ZpZGVzIGEgZnVsbC1iYXJyaWVyIGF0b21pYyBleGNoYW5nZSAtIHVzZSBpdCBpZiBhdmFpbGFibGUuICovCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfc3dhcCgmKG9iamVjdCktPl9fdmFsLCBkZXNpcmVkKSkKKyNlbHNlCisvKgorICogX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCkgaXMgb25seSBhbiBhY3F1aXJlIGJhcnJpZXIgaW4gdGhlb3J5IChhbHRob3VnaCBpbgorICogcHJhY3RpY2UgaXQgaXMgdXN1YWxseSBhIGZ1bGwgYmFycmllcikgc28gd2UgbmVlZCBhbiBleHBsaWNpdCBiYXJyaWVyIGJlZm9yZQorICogaXQuCisgKi8KKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQlcCitfX2V4dGVuc2lvbl9fICh7CQkJCQkJCVwKKwlfX3R5cGVvZl9fKG9iamVjdCkgX19vID0gKG9iamVjdCk7CQkJCVwKKwlfX3R5cGVvZl9fKGRlc2lyZWQpIF9fZCA9IChkZXNpcmVkKTsJCQkJXAorCSh2b2lkKShvcmRlcik7CQkJCQkJCVwKKwlfX3N5bmNfc3luY2hyb25pemUoKTsJCQkJCQlcCisJX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCYoX19vKS0+X192YWwsIF9fZCk7CQkJXAorfSkKKyNlbmRpZgorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfYWRkKCYob2JqZWN0KS0+X192YWwsCQlcCisJICAgIF9fYXRvbWljX2FwcGx5X3N0cmlkZShvYmplY3QsIG9wZXJhbmQpKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FuZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfb3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX2ZldGNoX2FuZF9zdWIoJihvYmplY3QpLT5fX3ZhbCwJCVwKKwkgICAgX19hdG9taWNfYXBwbHlfc3RyaWRlKG9iamVjdCwgb3BlcmFuZCkpKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfeG9yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQpKQorI2RlZmluZQlhdG9taWNfbG9hZF9leHBsaWNpdChvYmplY3QsIG9yZGVyKQkJCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfYWRkKCYob2JqZWN0KS0+X192YWwsIDApKQorI2RlZmluZQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCQlcCisJKCh2b2lkKWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKSkKKyNlbmRpZgorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb25zLgorICoKKyAqIERvbid0IHByb3ZpZGUgdGhlc2UgaW4ga2VybmVsIHNwYWNlLiBJbiBrZXJuZWwgc3BhY2UsIHdlIHNob3VsZCBiZQorICogZGlzY2lwbGluZWQgZW5vdWdoIHRvIGFsd2F5cyBwcm92aWRlIGV4cGxpY2l0IGJhcnJpZXJzLgorICovCisKKyNpZm5kZWYgX0tFUk5FTAorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisJICAgIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayhvYmplY3QsIGV4cGVjdGVkLCBkZXNpcmVkKQkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZXhjaGFuZ2Uob2JqZWN0LCBkZXNpcmVkKQkJCQlcCisJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hZGQob2JqZWN0LCBvcGVyYW5kKQkJCQlcCisJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19sb2FkKG9iamVjdCkJCQkJCQlcCisJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX3N0b3JlKG9iamVjdCwgZGVzaXJlZCkJCQkJCVwKKwlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNlbmRpZiAvKiAhX0tFUk5FTCAqLworCisvKgorICogNy4xNy44IEF0b21pYyBmbGFnIHR5cGUgYW5kIG9wZXJhdGlvbnMuCisgKgorICogWFhYOiBBc3N1bWUgYXRvbWljX2Jvb2wgY2FuIGJlIHVzZWQgYXMgYW4gYXRvbWljX2ZsYWcuIElzIHRoZXJlIHNvbWUKKyAqIGtpbmQgb2YgY29tcGlsZXIgYnVpbHQtaW4gdHlwZSB3ZSBjb3VsZCB1c2U/CisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWF0b21pY19ib29sCV9fZmxhZzsKK30gYXRvbWljX2ZsYWc7CisKKyNkZWZpbmUJQVRPTUlDX0ZMQUdfSU5JVAkJeyBBVE9NSUNfVkFSX0lOSVQoZmFsc2UpIH0KKworc3RhdGljIF9faW5saW5lIGJvb2wKK2F0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QsCisgICAgbWVtb3J5X29yZGVyIF9fb3JkZXIpCit7CisJcmV0dXJuIChhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoJl9fb2JqZWN0LT5fX2ZsYWcsIDEsIF9fb3JkZXIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbGFnICpfX29iamVjdCwgbWVtb3J5X29yZGVyIF9fb3JkZXIpCit7CisKKwlhdG9taWNfc3RvcmVfZXhwbGljaXQoJl9fb2JqZWN0LT5fX2ZsYWcsIDAsIF9fb3JkZXIpOworfQorCisjaWZuZGVmIF9LRVJORUwKK3N0YXRpYyBfX2lubGluZSBib29sCithdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0KQoreworCisJcmV0dXJuIChhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQoX19vYmplY3QsCisJICAgIG1lbW9yeV9vcmRlcl9zZXFfY3N0KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfZmxhZ19jbGVhcih2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QpCit7CisKKwlhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChfX29iamVjdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOworfQorI2VuZGlmIC8qICFfS0VSTkVMICovCisKKyNlbmRpZiAvKiA8YXRvbWljPiB1bmF2YWlsYWJsZSAqLworCisjZW5kaWYgLyogIV9TVERBVE9NSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYm9vbC5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRib29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2Nzg5MwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkYm9vbC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qPT09LS0tLSBzdGRib29sLmggLSBTdGFuZGFyZCBoZWFkZXIgZm9yIGJvb2xlYW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRWxpIEZyaWVkbWFuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fU1REQk9PTF9ICisjZGVmaW5lIF9fU1REQk9PTF9ICisKKy8qIERvbid0IGRlZmluZSBib29sLCB0cnVlLCBhbmQgZmFsc2UgaW4gQysrLCBleGNlcHQgYXMgYSBHTlUgZXh0ZW5zaW9uLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBib29sIF9Cb29sCisjZGVmaW5lIHRydWUgMQorI2RlZmluZSBmYWxzZSAwCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisvKiBEZWZpbmUgX0Jvb2wsIGJvb2wsIGZhbHNlLCB0cnVlIGFzIGEgR05VIGV4dGVuc2lvbi4gKi8KKyNkZWZpbmUgX0Jvb2wgYm9vbAorI2RlZmluZSBib29sICBib29sCisjZGVmaW5lIGZhbHNlIGZhbHNlCisjZGVmaW5lIHRydWUgIHRydWUKKyNlbmRpZgorCisjZGVmaW5lIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIDEKKworI2VuZGlmIC8qIF9fU1REQk9PTF9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3N0ZGRlZi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU0OTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRkZWYuaApAQCAtMCwwICsxLDEzNyBAQAorLyo9PT0tLS0tIHN0ZGRlZi5oIC0gQmFzaWMgdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBFbGkgRnJpZWRtYW4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZiAhZGVmaW5lZChfX1NURERFRl9IKSB8fCBkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5lZChfX25lZWRfc2l6ZV90KSB8fCBkZWZpbmVkKF9fbmVlZF93Y2hhcl90KSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmluZWQoX19uZWVkX05VTEwpIHx8IGRlZmluZWQoX19uZWVkX3dpbnRfdCkKKworI2lmICFkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpICYmICFkZWZpbmVkKF9fbmVlZF9zaXplX3QpICYmICAgICAgICAgICAgICAgICAgIFwKKyAgICAhZGVmaW5lZChfX25lZWRfd2NoYXJfdCkgJiYgIWRlZmluZWQoX19uZWVkX05VTEwpICYmICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIWRlZmluZWQoX19uZWVkX3dpbnRfdCkKKy8qIEFsd2F5cyBkZWZpbmUgbWlzY2VsbGFuZW91cyBwaWVjZXMgd2hlbiBtb2R1bGVzIGFyZSBhdmFpbGFibGUuICovCisjaWYgIV9faGFzX2ZlYXR1cmUobW9kdWxlcykKKyNkZWZpbmUgX19TVERERUZfSAorI2VuZGlmCisjZGVmaW5lIF9fbmVlZF9wdHJkaWZmX3QKKyNkZWZpbmUgX19uZWVkX3NpemVfdAorI2RlZmluZSBfX25lZWRfd2NoYXJfdAorI2RlZmluZSBfX25lZWRfTlVMTAorI2RlZmluZSBfX25lZWRfU1REREVGX0hfbWlzYworLyogX19uZWVkX3dpbnRfdCBpcyBpbnRlbnRpb25hbGx5IG5vdCBkZWZpbmVkIGhlcmUuICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19uZWVkX3B0cmRpZmZfdCkKKyNpZiAhZGVmaW5lZChfUFRSRElGRl9UKSB8fCBfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisvKiBBbHdheXMgZGVmaW5lIHB0cmRpZmZfdCB3aGVuIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4gKi8KKyNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2RlZmluZSBfUFRSRElGRl9UCisjZW5kaWYKK3R5cGVkZWYgX19QVFJESUZGX1RZUEVfXyBwdHJkaWZmX3Q7CisjZW5kaWYKKyN1bmRlZiBfX25lZWRfcHRyZGlmZl90CisjZW5kaWYgLyogZGVmaW5lZChfX25lZWRfcHRyZGlmZl90KSAqLworCisjaWYgZGVmaW5lZChfX25lZWRfc2l6ZV90KQorI2lmICFkZWZpbmVkKF9TSVpFX1QpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykKKy8qIEFsd2F5cyBkZWZpbmUgc2l6ZV90IHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLworI2lmICFfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisjZGVmaW5lIF9TSVpFX1QKKyNlbmRpZgordHlwZWRlZiBfX1NJWkVfVFlQRV9fIHNpemVfdDsKKyNlbmRpZgorI3VuZGVmIF9fbmVlZF9zaXplX3QKKyNlbmRpZiAvKmRlZmluZWQoX19uZWVkX3NpemVfdCkgKi8KKworI2lmIGRlZmluZWQoX19uZWVkX1NURERFRl9IX21pc2MpCisvKiBJU085ODk5OjIwMTEgNy4yMCAoQzExIEFubmV4IEspOiBEZWZpbmUgcnNpemVfdCBpZiBfX1NURENfV0FOVF9MSUJfRVhUMV9fIGlzCisgKiBlbmFibGVkLiAqLworI2lmIChkZWZpbmVkKF9fU1REQ19XQU5UX0xJQl9FWFQxX18pICYmIF9fU1REQ19XQU5UX0xJQl9FWFQxX18gPj0gMSAmJiBcCisgICAgICFkZWZpbmVkKF9SU0laRV9UKSkgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKQorLyogQWx3YXlzIGRlZmluZSByc2l6ZV90IHdoZW4gbW9kdWxlcyBhcmUgYXZhaWxhYmxlLiAqLworI2lmICFfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisjZGVmaW5lIF9SU0laRV9UCisjZW5kaWYKK3R5cGVkZWYgX19TSVpFX1RZUEVfXyByc2l6ZV90OworI2VuZGlmCisjZW5kaWYgLyogZGVmaW5lZChfX25lZWRfU1REREVGX0hfbWlzYykgKi8KKworI2lmIGRlZmluZWQoX19uZWVkX3djaGFyX3QpCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiBBbHdheXMgZGVmaW5lIHdjaGFyX3Qgd2hlbiBtb2R1bGVzIGFyZSBhdmFpbGFibGUuICovCisjaWYgIWRlZmluZWQoX1dDSEFSX1QpIHx8IF9faGFzX2ZlYXR1cmUobW9kdWxlcykKKyNpZiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2RlZmluZSBfV0NIQVJfVAorI2lmIGRlZmluZWQoX01TQ19FWFRFTlNJT05TKQorI2RlZmluZSBfV0NIQVJfVF9ERUZJTkVECisjZW5kaWYKKyNlbmRpZgordHlwZWRlZiBfX1dDSEFSX1RZUEVfXyB3Y2hhcl90OworI2VuZGlmCisjZW5kaWYKKyN1bmRlZiBfX25lZWRfd2NoYXJfdAorI2VuZGlmIC8qIGRlZmluZWQoX19uZWVkX3djaGFyX3QpICovCisKKyNpZiBkZWZpbmVkKF9fbmVlZF9OVUxMKQorI3VuZGVmIE5VTEwKKyNpZmRlZiBfX2NwbHVzcGx1cworIyAgaWYgIWRlZmluZWQoX19NSU5HVzMyX18pICYmICFkZWZpbmVkKF9NU0NfVkVSKQorIyAgICBkZWZpbmUgTlVMTCBfX251bGwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIE5VTEwgMAorIyAgZW5kaWYKKyNlbHNlCisjICBkZWZpbmUgTlVMTCAoKHZvaWQqKTApCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworI2lmIGRlZmluZWQoX01TQ19FWFRFTlNJT05TKSAmJiBkZWZpbmVkKF9OQVRJVkVfTlVMTFBUUl9TVVBQT1JURUQpCituYW1lc3BhY2Ugc3RkIHsgdHlwZWRlZiBkZWNsdHlwZShudWxscHRyKSBudWxscHRyX3Q7IH0KK3VzaW5nIDo6c3RkOjpudWxscHRyX3Q7CisjZW5kaWYKKyNlbmRpZgorI3VuZGVmIF9fbmVlZF9OVUxMCisjZW5kaWYgLyogZGVmaW5lZChfX25lZWRfTlVMTCkgKi8KKworI2lmIGRlZmluZWQoX19uZWVkX1NURERFRl9IX21pc2MpCisjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAyMDExMTJMIHx8IF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlICJfX3N0ZGRlZl9tYXhfYWxpZ25fdC5oIgorI2VuZGlmCisjZGVmaW5lIG9mZnNldG9mKHQsIGQpIF9fYnVpbHRpbl9vZmZzZXRvZih0LCBkKQorI3VuZGVmIF9fbmVlZF9TVERERUZfSF9taXNjCisjZW5kaWYgIC8qIGRlZmluZWQoX19uZWVkX1NURERFRl9IX21pc2MpICovCisKKy8qIFNvbWUgQyBsaWJyYXJpZXMgZXhwZWN0IHRvIHNlZSBhIHdpbnRfdCBoZXJlLiBPdGhlcnMgKG5vdGFibHkgTWluR1cpIHdpbGwgdXNlCitfX1dJTlRfVFlQRV9fIGRpcmVjdGx5OyBhY2NvbW1vZGF0ZSBib3RoIGJ5IHJlcXVpcmluZyBfX25lZWRfd2ludF90ICovCisjaWYgZGVmaW5lZChfX25lZWRfd2ludF90KQorLyogQWx3YXlzIGRlZmluZSB3aW50X3Qgd2hlbiBtb2R1bGVzIGFyZSBhdmFpbGFibGUuICovCisjaWYgIWRlZmluZWQoX1dJTlRfVCkgfHwgX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2lmICFfX2hhc19mZWF0dXJlKG1vZHVsZXMpCisjZGVmaW5lIF9XSU5UX1QKKyNlbmRpZgordHlwZWRlZiBfX1dJTlRfVFlQRV9fIHdpbnRfdDsKKyNlbmRpZgorI3VuZGVmIF9fbmVlZF93aW50X3QKKyNlbmRpZiAvKiBfX25lZWRfd2ludF90ICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRpbnQuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyZmNiYwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3RkaW50LmgKQEAgLTAsMCArMSw3MDcgQEAKKy8qPT09LS0tLSBzdGRpbnQuaCAtIFN0YW5kYXJkIGhlYWRlciBmb3Igc2l6ZWQgaW50ZWdlciB0eXBlcyAtLS0tLS0tLS0tLS0tLT09PSpcCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENocmlzIExhdHRuZXIKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorXCo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ki8KKworI2lmbmRlZiBfX0NMQU5HX1NURElOVF9ICisjZGVmaW5lIF9fQ0xBTkdfU1RESU5UX0gKKworLyogSWYgd2UncmUgaG9zdGVkLCBmYWxsIGJhY2sgdG8gdGhlIHN5c3RlbSdzIHN0ZGludC5oLCB3aGljaCBtaWdodCBoYXZlCisgKiBhZGRpdGlvbmFsIGRlZmluaXRpb25zLgorICovCisjaWYgX19TVERDX0hPU1RFRF9fICYmIF9faGFzX2luY2x1ZGVfbmV4dCg8c3RkaW50Lmg+KQorCisvLyBDOTkgNy4xOC4zIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzCisvLworLy8gIEZvb3Rub3RlIDIxOSwgMjIwOiBDKysgaW1wbGVtZW50YXRpb25zIHNob3VsZCBkZWZpbmUgdGhlc2UgbWFjcm9zIG9ubHkgd2hlbgorLy8gIF9fU1REQ19MSU1JVF9NQUNST1MgaXMgZGVmaW5lZCBiZWZvcmUgPHN0ZGludC5oPiBpcyBpbmNsdWRlZC4KKy8vCisvLyAgRm9vdG5vdGUgMjIyOiBDKysgaW1wbGVtZW50YXRpb25zIHNob3VsZCBkZWZpbmUgdGhlc2UgbWFjcm9zIG9ubHkgd2hlbgorLy8gIF9fU1REQ19DT05TVEFOVF9NQUNST1MgaXMgZGVmaW5lZCBiZWZvcmUgPHN0ZGludC5oPiBpcyBpbmNsdWRlZC4KKy8vCisvLyBDKysxMSBbY3N0ZGludC5zeW5dcDI6CisvLworLy8gIFRoZSBtYWNyb3MgZGVmaW5lZCBieSA8Y3N0ZGludD4gYXJlIHByb3ZpZGVkIHVuY29uZGl0aW9uYWxseS4gSW4gcGFydGljdWxhciwKKy8vICB0aGUgc3ltYm9scyBfX1NURENfTElNSVRfTUFDUk9TIGFuZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TIChtZW50aW9uZWQgaW4KKy8vICBmb290bm90ZXMgMjE5LCAyMjAsIGFuZCAyMjIgaW4gdGhlIEMgc3RhbmRhcmQpIHBsYXkgbm8gcm9sZSBpbiBDKysuCisvLworLy8gQzExIHJlbW92ZWQgdGhlIHByb2JsZW1hdGljIGZvb3Rub3Rlcy4KKy8vCisvLyBXb3JrIGFyb3VuZCB0aGlzIGluY29uc2lzdGVuY3kgYnkgYWx3YXlzIGRlZmluaW5nIHRob3NlIG1hY3JvcyBpbiBDKysgbW9kZSwKKy8vIHNvIHRoYXQgYSBDIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gd2hpY2ggZm9sbG93cyB0aGUgQzk5IHN0YW5kYXJkIGNhbiBiZQorLy8gdXNlZCBpbiBDKysuCisjIGlmZGVmIF9fY3BsdXNwbHVzCisjICBpZiAhZGVmaW5lZChfX1NURENfTElNSVRfTUFDUk9TKQorIyAgIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCisjICAgZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1NfREVGSU5FRF9CWV9DTEFORworIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkKF9fU1REQ19DT05TVEFOVF9NQUNST1MpCisjICAgZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCisjICBlbmRpZgorIyBlbmRpZgorCisjIGluY2x1ZGVfbmV4dCA8c3RkaW50Lmg+CisKKyMgaWZkZWYgX19TVERDX0xJTUlUX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCisjICB1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjICB1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TX0RFRklORURfQllfQ0xBTkcKKyMgZW5kaWYKKyMgaWZkZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPU19ERUZJTkVEX0JZX0NMQU5HCisjICB1bmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjICB1bmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TX0RFRklORURfQllfQ0xBTkcKKyMgZW5kaWYKKworI2Vsc2UKKworLyogQzk5IDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMuCisgKiBDOTkgNy4xOC4xLjIgTWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICogQzk5IDcuMTguMS4zIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICoKKyAqIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGV4YWN0LXdpZHRoIHR5cGUgYmUgZGVmaW5lZCBmb3IgOC0sIDE2LSwgMzItLCBhbmQKKyAqIDY0LWJpdCB0eXBlcyBpZiB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gT3RoZXIgZXhhY3Qgd2lkdGggdHlwZXMgYXJlIG9wdGlvbmFsLgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVzIGFuIGV4YWN0LXdpZHRoIHR5cGVzIGZvciBldmVyeSBpbnRlZ2VyIHdpZHRoCisgKiB0aGF0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzdGFuZGFyZCBpbnRlZ2VyIHR5cGVzLgorICoKKyAqIFRoZSBzdGFuZGFyZCBhbHNvIHJlcXVpcmVzIG1pbmltdW0td2lkdGggdHlwZXMgYmUgZGVmaW5lZCBmb3IgOC0sIDE2LSwgMzItLAorICogYW5kIDY0LWJpdCB3aWR0aHMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIGFyZSBjb3JyZXNwb25kaW5nIGV4YWN0LXdpZHRoCisgKiB0eXBlcy4KKyAqCisgKiBUbyBhY2NvbW1vZGF0ZSB0YXJnZXRzIHRoYXQgYXJlIG1pc3NpbmcgdHlwZXMgdGhhdCBhcmUgZXhhY3RseSA4LCAxNiwgMzIsIG9yCisgKiA2NCBiaXRzIHdpZGUsIHRoaXMgaW1wbGVtZW50YXRpb24gdGFrZXMgYW4gYXBwcm9hY2ggb2YgY2FzY2FkaW5nCisgKiByZWRlZmludGlvbnMsIHJlZGVmaW5pbmcgX19pbnRfbGVhc3ROX3QgdG8gc3VjY2Vzc2l2ZWx5IHNtYWxsZXIgZXhhY3Qtd2lkdGgKKyAqIHR5cGVzLiBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgdGhlIHR5cGVzIGFyZSBkZWZpbmVkIGluIG9yZGVyIG9mCisgKiBkZXNjZW5kaW5nIHdpZHRocy4KKyAqCisgKiBXZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgdGhlIG1pbmltdW0td2lkdGggdHlwZXMgYW5kIHRoZSBmYXN0ZXN0CisgKiBtaW5pbXVtLXdpZHRoIHR5cGVzIGFyZSB0aGUgc2FtZS4gVGhpcyBpcyBhbGxvd2VkIGJ5IHRoZSBzdGFuZGFyZCwgYnV0IGlzCisgKiBzdWJvcHRpbWFsLgorICoKKyAqIEluIHZpb2xhdGlvbiBvZiB0aGUgc3RhbmRhcmQsIHNvbWUgdGFyZ2V0cyBkbyBub3QgaW1wbGVtZW50IGEgdHlwZSB0aGF0IGlzCisgKiB3aWRlIGVub3VnaCB0byByZXByZXNlbnQgYWxsIG9mIHRoZSByZXF1aXJlZCB3aWR0aHMgKDgtLCAxNi0sIDMyLSwgNjQtYml0KS4KKyAqIFRvIGFjY29tbW9kYXRlIHRoZXNlIHRhcmdldHMsIGEgcmVxdWlyZWQgbWluaW11bS13aWR0aCB0eXBlIGlzIG9ubHkKKyAqIGRlZmluZWQgaWYgdGhlcmUgZXhpc3RzIGFuIGV4YWN0LXdpZHRoIHR5cGUgb2YgZXF1YWwgb3IgZ3JlYXRlciB3aWR0aC4KKyAqLworCisjaWZkZWYgX19JTlQ2NF9UWVBFX18KKyMgaWZuZGVmIF9faW50OF90X2RlZmluZWQgLyogZ2xpYmMgc3lzL3R5cGVzLmggYWxzbyBkZWZpbmVzIGludDY0X3QqLwordHlwZWRlZiBfX0lOVDY0X1RZUEVfXyBpbnQ2NF90OworIyBlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCit0eXBlZGVmIF9fVUlOVDY0X1RZUEVfXyB1aW50NjRfdDsKKyMgZGVmaW5lIF9faW50X2xlYXN0NjRfdCBpbnQ2NF90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q2NF90IHVpbnQ2NF90CisjIGRlZmluZSBfX2ludF9sZWFzdDMyX3QgaW50NjRfdAorIyBkZWZpbmUgX191aW50X2xlYXN0MzJfdCB1aW50NjRfdAorIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDY0X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDY0X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDY0X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50NjRfdAorI2VuZGlmIC8qIF9fSU5UNjRfVFlQRV9fICovCisKKyNpZmRlZiBfX2ludF9sZWFzdDY0X3QKK3R5cGVkZWYgX19pbnRfbGVhc3Q2NF90IGludF9sZWFzdDY0X3Q7Cit0eXBlZGVmIF9fdWludF9sZWFzdDY0X3QgdWludF9sZWFzdDY0X3Q7Cit0eXBlZGVmIF9faW50X2xlYXN0NjRfdCBpbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9fdWludF9sZWFzdDY0X3QgdWludF9mYXN0NjRfdDsKKyNlbmRpZiAvKiBfX2ludF9sZWFzdDY0X3QgKi8KKworI2lmZGVmIF9fSU5UNTZfVFlQRV9fCit0eXBlZGVmIF9fSU5UNTZfVFlQRV9fIGludDU2X3Q7Cit0eXBlZGVmIF9fVUlOVDU2X1RZUEVfXyB1aW50NTZfdDsKK3R5cGVkZWYgaW50NTZfdCBpbnRfbGVhc3Q1Nl90OwordHlwZWRlZiB1aW50NTZfdCB1aW50X2xlYXN0NTZfdDsKK3R5cGVkZWYgaW50NTZfdCBpbnRfZmFzdDU2X3Q7Cit0eXBlZGVmIHVpbnQ1Nl90IHVpbnRfZmFzdDU2X3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDMyX3QgaW50NTZfdAorIyBkZWZpbmUgX191aW50X2xlYXN0MzJfdCB1aW50NTZfdAorIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDU2X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDU2X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDU2X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50NTZfdAorI2VuZGlmIC8qIF9fSU5UNTZfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UNDhfVFlQRV9fCit0eXBlZGVmIF9fSU5UNDhfVFlQRV9fIGludDQ4X3Q7Cit0eXBlZGVmIF9fVUlOVDQ4X1RZUEVfXyB1aW50NDhfdDsKK3R5cGVkZWYgaW50NDhfdCBpbnRfbGVhc3Q0OF90OwordHlwZWRlZiB1aW50NDhfdCB1aW50X2xlYXN0NDhfdDsKK3R5cGVkZWYgaW50NDhfdCBpbnRfZmFzdDQ4X3Q7Cit0eXBlZGVmIHVpbnQ0OF90IHVpbnRfZmFzdDQ4X3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDMyX3QgaW50NDhfdAorIyBkZWZpbmUgX191aW50X2xlYXN0MzJfdCB1aW50NDhfdAorIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDQ4X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDQ4X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDQ4X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50NDhfdAorI2VuZGlmIC8qIF9fSU5UNDhfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UNDBfVFlQRV9fCit0eXBlZGVmIF9fSU5UNDBfVFlQRV9fIGludDQwX3Q7Cit0eXBlZGVmIF9fVUlOVDQwX1RZUEVfXyB1aW50NDBfdDsKK3R5cGVkZWYgaW50NDBfdCBpbnRfbGVhc3Q0MF90OwordHlwZWRlZiB1aW50NDBfdCB1aW50X2xlYXN0NDBfdDsKK3R5cGVkZWYgaW50NDBfdCBpbnRfZmFzdDQwX3Q7Cit0eXBlZGVmIHVpbnQ0MF90IHVpbnRfZmFzdDQwX3Q7CisjIGRlZmluZSBfX2ludF9sZWFzdDMyX3QgaW50NDBfdAorIyBkZWZpbmUgX191aW50X2xlYXN0MzJfdCB1aW50NDBfdAorIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDQwX3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDQwX3QKKyMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDQwX3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50NDBfdAorI2VuZGlmIC8qIF9fSU5UNDBfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UMzJfVFlQRV9fCisKKyMgaWZuZGVmIF9faW50OF90X2RlZmluZWQgLyogZ2xpYmMgc3lzL3R5cGVzLmggYWxzbyBkZWZpbmVzIGludDMyX3QqLwordHlwZWRlZiBfX0lOVDMyX1RZUEVfXyBpbnQzMl90OworIyBlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCisKKyMgaWZuZGVmIF9fdWludDMyX3RfZGVmaW5lZCAgLyogbW9yZSBnbGliYyBjb21wYXRpYmlsaXR5ICovCisjIGRlZmluZSBfX3VpbnQzMl90X2RlZmluZWQKK3R5cGVkZWYgX19VSU5UMzJfVFlQRV9fIHVpbnQzMl90OworIyBlbmRpZiAvKiBfX3VpbnQzMl90X2RlZmluZWQgKi8KKworIyBkZWZpbmUgX19pbnRfbGVhc3QzMl90IGludDMyX3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDMyX3QgdWludDMyX3QKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQzMl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQzMl90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQzMl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDMyX3QKKyNlbmRpZiAvKiBfX0lOVDMyX1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3QzMl90Cit0eXBlZGVmIF9faW50X2xlYXN0MzJfdCBpbnRfbGVhc3QzMl90OwordHlwZWRlZiBfX3VpbnRfbGVhc3QzMl90IHVpbnRfbGVhc3QzMl90OwordHlwZWRlZiBfX2ludF9sZWFzdDMyX3QgaW50X2Zhc3QzMl90OwordHlwZWRlZiBfX3VpbnRfbGVhc3QzMl90IHVpbnRfZmFzdDMyX3Q7CisjZW5kaWYgLyogX19pbnRfbGVhc3QzMl90ICovCisKKyNpZmRlZiBfX0lOVDI0X1RZUEVfXwordHlwZWRlZiBfX0lOVDI0X1RZUEVfXyBpbnQyNF90OwordHlwZWRlZiBfX1VJTlQyNF9UWVBFX18gdWludDI0X3Q7Cit0eXBlZGVmIGludDI0X3QgaW50X2xlYXN0MjRfdDsKK3R5cGVkZWYgdWludDI0X3QgdWludF9sZWFzdDI0X3Q7Cit0eXBlZGVmIGludDI0X3QgaW50X2Zhc3QyNF90OwordHlwZWRlZiB1aW50MjRfdCB1aW50X2Zhc3QyNF90OworIyBkZWZpbmUgX19pbnRfbGVhc3QxNl90IGludDI0X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDE2X3QgdWludDI0X3QKKyMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDI0X3QKKyMgZGVmaW5lIF9fdWludF9sZWFzdDhfdCB1aW50MjRfdAorI2VuZGlmIC8qIF9fSU5UMjRfVFlQRV9fICovCisKKyNpZmRlZiBfX0lOVDE2X1RZUEVfXworI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkIC8qIGdsaWJjIHN5cy90eXBlcy5oIGFsc28gZGVmaW5lcyBpbnQxNl90Ki8KK3R5cGVkZWYgX19JTlQxNl9UWVBFX18gaW50MTZfdDsKKyNlbmRpZiAvKiBfX2ludDhfdF9kZWZpbmVkICovCit0eXBlZGVmIF9fVUlOVDE2X1RZUEVfXyB1aW50MTZfdDsKKyMgZGVmaW5lIF9faW50X2xlYXN0MTZfdCBpbnQxNl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3QxNl90IHVpbnQxNl90CisjIGRlZmluZSBfX2ludF9sZWFzdDhfdCBpbnQxNl90CisjIGRlZmluZSBfX3VpbnRfbGVhc3Q4X3QgdWludDE2X3QKKyNlbmRpZiAvKiBfX0lOVDE2X1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3QxNl90Cit0eXBlZGVmIF9faW50X2xlYXN0MTZfdCBpbnRfbGVhc3QxNl90OwordHlwZWRlZiBfX3VpbnRfbGVhc3QxNl90IHVpbnRfbGVhc3QxNl90OwordHlwZWRlZiBfX2ludF9sZWFzdDE2X3QgaW50X2Zhc3QxNl90OwordHlwZWRlZiBfX3VpbnRfbGVhc3QxNl90IHVpbnRfZmFzdDE2X3Q7CisjZW5kaWYgLyogX19pbnRfbGVhc3QxNl90ICovCisKKworI2lmZGVmIF9fSU5UOF9UWVBFX18KKyNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZCAgLyogZ2xpYmMgc3lzL3R5cGVzLmggYWxzbyBkZWZpbmVzIGludDhfdCovCit0eXBlZGVmIF9fSU5UOF9UWVBFX18gaW50OF90OworI2VuZGlmIC8qIF9faW50OF90X2RlZmluZWQgKi8KK3R5cGVkZWYgX19VSU5UOF9UWVBFX18gdWludDhfdDsKKyMgZGVmaW5lIF9faW50X2xlYXN0OF90IGludDhfdAorIyBkZWZpbmUgX191aW50X2xlYXN0OF90IHVpbnQ4X3QKKyNlbmRpZiAvKiBfX0lOVDhfVFlQRV9fICovCisKKyNpZmRlZiBfX2ludF9sZWFzdDhfdAordHlwZWRlZiBfX2ludF9sZWFzdDhfdCBpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9fdWludF9sZWFzdDhfdCB1aW50X2xlYXN0OF90OwordHlwZWRlZiBfX2ludF9sZWFzdDhfdCBpbnRfZmFzdDhfdDsKK3R5cGVkZWYgX191aW50X2xlYXN0OF90IHVpbnRfZmFzdDhfdDsKKyNlbmRpZiAvKiBfX2ludF9sZWFzdDhfdCAqLworCisvKiBwcmV2ZW50IGdsaWJjIHN5cy90eXBlcy5oIGZyb20gZGVmaW5pbmcgY29uZmxpY3RpbmcgdHlwZXMgKi8KKyNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAorIyBkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAorI2VuZGlmIC8qIF9faW50OF90X2RlZmluZWQgKi8KKworLyogQzk5IDcuMTguMS40IEludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycy4KKyAqLworI2RlZmluZSBfX3N0ZGludF9qb2luMyhhLGIsYykgYSAjIyBiICMjIGMKKworI2RlZmluZSAgX19pbnRuX3QobikgX19zdGRpbnRfam9pbjMoIGludCwgbiwgX3QpCisjZGVmaW5lIF9fdWludG5fdChuKSBfX3N0ZGludF9qb2luMyh1aW50LCBuLCBfdCkKKworI2lmbmRlZiBfSU5UUFRSX1QKKyNpZm5kZWYgX19pbnRwdHJfdF9kZWZpbmVkCit0eXBlZGVmICBfX2ludG5fdChfX0lOVFBUUl9XSURUSF9fKSAgaW50cHRyX3Q7CisjZGVmaW5lIF9faW50cHRyX3RfZGVmaW5lZAorI2RlZmluZSBfSU5UUFRSX1QKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgX1VJTlRQVFJfVAordHlwZWRlZiBfX3VpbnRuX3QoX19JTlRQVFJfV0lEVEhfXykgdWludHB0cl90OworI2RlZmluZSBfVUlOVFBUUl9UCisjZW5kaWYKKworLyogQzk5IDcuMTguMS41IEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMuCisgKi8KK3R5cGVkZWYgX19JTlRNQVhfVFlQRV9fICBpbnRtYXhfdDsKK3R5cGVkZWYgX19VSU5UTUFYX1RZUEVfXyB1aW50bWF4X3Q7CisKKy8qIEM5OSA3LjE4LjQgTWFjcm9zIGZvciBtaW5pbXVtLXdpZHRoIGludGVnZXIgY29uc3RhbnRzLgorICoKKyAqIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGludGVnZXIgY29uc3RhbnQgbWFjcm9zIGJlIGRlZmluZWQgZm9yIGFsbCB0aGUKKyAqIG1pbmltdW0td2lkdGggdHlwZXMgZGVmaW5lZCBhYm92ZS4gQXMgOC0sIDE2LSwgMzItLCBhbmQgNjQtYml0IG1pbmltdW0td2lkdGgKKyAqIHR5cGVzIGFyZSByZXF1aXJlZCwgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZWdlciBjb25zdGFudCBtYWNyb3MgYXJlIGRlZmluZWQKKyAqIGhlcmUuIFRoaXMgaW1wbGVtZW50YXRpb24gYWxzbyBkZWZpbmVzIG1pbmltdW0td2lkdGggdHlwZXMgZm9yIGV2ZXJ5IG90aGVyCisgKiBpbnRlZ2VyIHdpZHRoIHRoYXQgdGhlIHRhcmdldCBpbXBsZW1lbnRzLCBzbyBjb3JyZXNwb25kaW5nIG1hY3JvcyBhcmUKKyAqIGRlZmluZWQgYmVsb3csIHRvby4KKyAqCisgKiBUaGVzZSBtYWNyb3MgYXJlIGRlZmluZWQgdXNpbmcgdGhlIHNhbWUgc3VjY2Vzc2l2ZS1zaHJpbmtpbmcgYXBwcm9hY2ggYXMKKyAqIHRoZSB0eXBlIGRlZmluaXRpb25zIGFib3ZlLiBJdCBpcyBsaWtld2lzZSBpbXBvcnRhbnQgdGhhdCBtYWNyb3MgYXJlIGRlZmluZWQKKyAqIGluIG9yZGVyIG9mIGRlY2VuZGluZyB3aWR0aC4KKyAqCisgKiBOb3RlIHRoYXQgQysrIHNob3VsZCBub3QgY2hlY2sgX19TVERDX0NPTlNUQU5UX01BQ1JPUyBoZXJlLCBjb250cmFyeSB0byB0aGUKKyAqIGNsYWltcyBvZiB0aGUgQyBzdGFuZGFyZCAoc2VlIEMrKyAxOC4zLjFwMiwgW2NzdGRpbnQuc3luXSkuCisgKi8KKworI2RlZmluZSBfX2ludF9jX2pvaW4oYSwgYikgYSAjIyBiCisjZGVmaW5lIF9faW50X2Modiwgc3VmZml4KSBfX2ludF9jX2pvaW4odiwgc3VmZml4KQorI2RlZmluZSBfX3VpbnRfYyh2LCBzdWZmaXgpIF9faW50X2Nfam9pbih2IyNVLCBzdWZmaXgpCisKKworI2lmZGVmIF9fSU5UNjRfVFlQRV9fCisjIGlmZGVmIF9fSU5UNjRfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50NjRfY19zdWZmaXggX19JTlQ2NF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQzMl9jX3N1ZmZpeCBfX0lOVDY0X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDE2X2Nfc3VmZml4IF9fSU5UNjRfQ19TVUZGSVhfXworIyAgZGVmaW5lICBfX2ludDhfY19zdWZmaXggX19JTlQ2NF9DX1NVRkZJWF9fCisjIGVsc2UKKyMgIHVuZGVmIF9faW50NjRfY19zdWZmaXgKKyMgIHVuZGVmIF9faW50MzJfY19zdWZmaXgKKyMgIHVuZGVmIF9faW50MTZfY19zdWZmaXgKKyMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKKyMgZW5kaWYgLyogX19JTlQ2NF9DX1NVRkZJWF9fICovCisjZW5kaWYgLyogX19JTlQ2NF9UWVBFX18gKi8KKworI2lmZGVmIF9faW50X2xlYXN0NjRfdAorIyBpZmRlZiBfX2ludDY0X2Nfc3VmZml4CisjICBkZWZpbmUgSU5UNjRfQyh2KSBfX2ludF9jKHYsIF9faW50NjRfY19zdWZmaXgpCisjICBkZWZpbmUgVUlOVDY0X0ModikgX191aW50X2ModiwgX19pbnQ2NF9jX3N1ZmZpeCkKKyMgZWxzZQorIyAgZGVmaW5lIElOVDY0X0ModikgdgorIyAgZGVmaW5lIFVJTlQ2NF9DKHYpIHYgIyMgVQorIyBlbmRpZiAvKiBfX2ludDY0X2Nfc3VmZml4ICovCisjZW5kaWYgLyogX19pbnRfbGVhc3Q2NF90ICovCisKKworI2lmZGVmIF9fSU5UNTZfVFlQRV9fCisjIGlmZGVmIF9fSU5UNTZfQ19TVUZGSVhfXworIyAgZGVmaW5lIElOVDU2X0ModikgX19pbnRfYyh2LCBfX0lOVDU2X0NfU1VGRklYX18pCisjICBkZWZpbmUgVUlOVDU2X0ModikgX191aW50X2ModiwgX19JTlQ1Nl9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQ1Nl9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDU2X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UNTZfQ19TVUZGSVhfXworIyBlbHNlCisjICBkZWZpbmUgSU5UNTZfQyh2KSB2CisjICBkZWZpbmUgVUlOVDU2X0ModikgdiAjIyBVCisjICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UNTZfQ19TVUZGSVhfXyAqLworI2VuZGlmIC8qIF9fSU5UNTZfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UNDhfVFlQRV9fCisjIGlmZGVmIF9fSU5UNDhfQ19TVUZGSVhfXworIyAgZGVmaW5lIElOVDQ4X0ModikgX19pbnRfYyh2LCBfX0lOVDQ4X0NfU1VGRklYX18pCisjICBkZWZpbmUgVUlOVDQ4X0ModikgX191aW50X2ModiwgX19JTlQ0OF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQ0OF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDQ4X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UNDhfQ19TVUZGSVhfXworIyBlbHNlCisjICBkZWZpbmUgSU5UNDhfQyh2KSB2CisjICBkZWZpbmUgVUlOVDQ4X0ModikgdiAjIyBVCisjICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UNDhfQ19TVUZGSVhfXyAqLworI2VuZGlmIC8qIF9fSU5UNDhfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UNDBfVFlQRV9fCisjIGlmZGVmIF9fSU5UNDBfQ19TVUZGSVhfXworIyAgZGVmaW5lIElOVDQwX0ModikgX19pbnRfYyh2LCBfX0lOVDQwX0NfU1VGRklYX18pCisjICBkZWZpbmUgVUlOVDQwX0ModikgX191aW50X2ModiwgX19JTlQ0MF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQ0MF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDQwX0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UNDBfQ19TVUZGSVhfXworIyBlbHNlCisjICBkZWZpbmUgSU5UNDBfQyh2KSB2CisjICBkZWZpbmUgVUlOVDQwX0ModikgdiAjIyBVCisjICB1bmRlZiBfX2ludDMyX2Nfc3VmZml4CisjICB1bmRlZiBfX2ludDE2X2Nfc3VmZml4CisjICB1bmRlZiAgX19pbnQ4X2Nfc3VmZml4CisjIGVuZGlmIC8qIF9fSU5UNDBfQ19TVUZGSVhfXyAqLworI2VuZGlmIC8qIF9fSU5UNDBfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UMzJfVFlQRV9fCisjIGlmZGVmIF9fSU5UMzJfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50MzJfY19zdWZmaXggX19JTlQzMl9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQxNl9jX3N1ZmZpeCBfX0lOVDMyX0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDhfY19zdWZmaXggIF9fSU5UMzJfQ19TVUZGSVhfXworI2Vsc2UKKyMgIHVuZGVmIF9faW50MzJfY19zdWZmaXgKKyMgIHVuZGVmIF9faW50MTZfY19zdWZmaXgKKyMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKKyMgZW5kaWYgLyogX19JTlQzMl9DX1NVRkZJWF9fICovCisjZW5kaWYgLyogX19JTlQzMl9UWVBFX18gKi8KKworI2lmZGVmIF9faW50X2xlYXN0MzJfdAorIyBpZmRlZiBfX2ludDMyX2Nfc3VmZml4CisjICBkZWZpbmUgSU5UMzJfQyh2KSBfX2ludF9jKHYsIF9faW50MzJfY19zdWZmaXgpCisjICBkZWZpbmUgVUlOVDMyX0ModikgX191aW50X2ModiwgX19pbnQzMl9jX3N1ZmZpeCkKKyMgZWxzZQorIyAgZGVmaW5lIElOVDMyX0ModikgdgorIyAgZGVmaW5lIFVJTlQzMl9DKHYpIHYgIyMgVQorIyBlbmRpZiAvKiBfX2ludDMyX2Nfc3VmZml4ICovCisjZW5kaWYgLyogX19pbnRfbGVhc3QzMl90ICovCisKKworI2lmZGVmIF9fSU5UMjRfVFlQRV9fCisjIGlmZGVmIF9fSU5UMjRfQ19TVUZGSVhfXworIyAgZGVmaW5lIElOVDI0X0ModikgX19pbnRfYyh2LCBfX0lOVDI0X0NfU1VGRklYX18pCisjICBkZWZpbmUgVUlOVDI0X0ModikgX191aW50X2ModiwgX19JTlQyNF9DX1NVRkZJWF9fKQorIyAgZGVmaW5lIF9faW50MTZfY19zdWZmaXggX19JTlQyNF9DX1NVRkZJWF9fCisjICBkZWZpbmUgX19pbnQ4X2Nfc3VmZml4ICBfX0lOVDI0X0NfU1VGRklYX18KKyMgZWxzZQorIyAgZGVmaW5lIElOVDI0X0ModikgdgorIyAgZGVmaW5lIFVJTlQyNF9DKHYpIHYgIyMgVQorIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAorIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAorIyBlbmRpZiAvKiBfX0lOVDI0X0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDI0X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDE2X1RZUEVfXworIyBpZmRlZiBfX0lOVDE2X0NfU1VGRklYX18KKyMgIGRlZmluZSBfX2ludDE2X2Nfc3VmZml4IF9fSU5UMTZfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50OF9jX3N1ZmZpeCAgX19JTlQxNl9DX1NVRkZJWF9fCisjZWxzZQorIyAgdW5kZWYgX19pbnQxNl9jX3N1ZmZpeAorIyAgdW5kZWYgIF9faW50OF9jX3N1ZmZpeAorIyBlbmRpZiAvKiBfX0lOVDE2X0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDE2X1RZUEVfXyAqLworCisjaWZkZWYgX19pbnRfbGVhc3QxNl90CisjIGlmZGVmIF9faW50MTZfY19zdWZmaXgKKyMgIGRlZmluZSBJTlQxNl9DKHYpIF9faW50X2ModiwgX19pbnQxNl9jX3N1ZmZpeCkKKyMgIGRlZmluZSBVSU5UMTZfQyh2KSBfX3VpbnRfYyh2LCBfX2ludDE2X2Nfc3VmZml4KQorIyBlbHNlCisjICBkZWZpbmUgSU5UMTZfQyh2KSB2CisjICBkZWZpbmUgVUlOVDE2X0ModikgdiAjIyBVCisjIGVuZGlmIC8qIF9faW50MTZfY19zdWZmaXggKi8KKyNlbmRpZiAvKiBfX2ludF9sZWFzdDE2X3QgKi8KKworCisjaWZkZWYgX19JTlQ4X1RZUEVfXworIyBpZmRlZiBfX0lOVDhfQ19TVUZGSVhfXworIyAgZGVmaW5lIF9faW50OF9jX3N1ZmZpeCBfX0lOVDhfQ19TVUZGSVhfXworI2Vsc2UKKyMgIHVuZGVmICBfX2ludDhfY19zdWZmaXgKKyMgZW5kaWYgLyogX19JTlQ4X0NfU1VGRklYX18gKi8KKyNlbmRpZiAvKiBfX0lOVDhfVFlQRV9fICovCisKKyNpZmRlZiBfX2ludF9sZWFzdDhfdAorIyBpZmRlZiBfX2ludDhfY19zdWZmaXgKKyMgIGRlZmluZSBJTlQ4X0ModikgX19pbnRfYyh2LCBfX2ludDhfY19zdWZmaXgpCisjICBkZWZpbmUgVUlOVDhfQyh2KSBfX3VpbnRfYyh2LCBfX2ludDhfY19zdWZmaXgpCisjIGVsc2UKKyMgIGRlZmluZSBJTlQ4X0ModikgdgorIyAgZGVmaW5lIFVJTlQ4X0ModikgdiAjIyBVCisjIGVuZGlmIC8qIF9faW50OF9jX3N1ZmZpeCAqLworI2VuZGlmIC8qIF9faW50X2xlYXN0OF90ICovCisKKworLyogQzk5IDcuMTguMi4xIExpbWl0cyBvZiBleGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICogQzk5IDcuMTguMi4yIExpbWl0cyBvZiBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMuCisgKiBDOTkgNy4xOC4yLjMgTGltaXRzIG9mIGZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzLgorICoKKyAqIFRoZSBwcmVzZW5jZSBvZiBsaW1pdCBtYWNyb3MgYXJlIGNvbXBsZXRlbHkgb3B0aW9uYWwgaW4gQzk5LiAgVGhpcworICogaW1wbGVtZW50YXRpb24gZGVmaW5lcyBsaW1pdHMgZm9yIGFsbCBvZiB0aGUgdHlwZXMgKGV4YWN0LSBhbmQKKyAqIG1pbmltdW0td2lkdGgpIHRoYXQgaXQgZGVmaW5lcyBhYm92ZSwgdXNpbmcgdGhlIGxpbWl0cyBvZiB0aGUgbWluaW11bS13aWR0aAorICogdHlwZSBmb3IgYW55IHR5cGVzIHRoYXQgZG8gbm90IGhhdmUgZXhhY3Qtd2lkdGggcmVwcmVzZW50YXRpb25zLgorICoKKyAqIEFzIGluIHRoZSB0eXBlIGRlZmluaXRpb25zLCB0aGlzIHNlY3Rpb24gdGFrZXMgYW4gYXBwcm9hY2ggb2YKKyAqIHN1Y2Nlc3NpdmUtc2hyaW5raW5nIHRvIGRldGVybWluZSB3aGljaCBsaW1pdHMgdG8gdXNlIGZvciB0aGUgc3RhbmRhcmQgKDgsCisgKiAxNiwgMzIsIDY0KSBiaXQgd2lkdGhzIHdoZW4gdGhleSBkb24ndCBoYXZlIGV4YWN0IHJlcHJlc2VudGF0aW9ucy4gSXQgaXMKKyAqIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB0aGUgZGVmaW50aW9ucyBiZSBrZXB0IGluIG9yZGVyIG9mIGRlY2VuZGluZworICogd2lkdGhzLgorICoKKyAqIE5vdGUgdGhhdCBDKysgc2hvdWxkIG5vdCBjaGVjayBfX1NURENfTElNSVRfTUFDUk9TIGhlcmUsIGNvbnRyYXJ5IHRvIHRoZQorICogY2xhaW1zIG9mIHRoZSBDIHN0YW5kYXJkIChzZWUgQysrIDE4LjMuMXAyLCBbY3N0ZGludC5zeW5dKS4KKyAqLworCisjaWZkZWYgX19JTlQ2NF9UWVBFX18KKyMgZGVmaW5lIElOVDY0X01BWCAgICAgICAgICAgSU5UNjRfQyggOTIyMzM3MjAzNjg1NDc3NTgwNykKKyMgZGVmaW5lIElOVDY0X01JTiAgICAgICAgICgtSU5UNjRfQyggOTIyMzM3MjAzNjg1NDc3NTgwNyktMSkKKyMgZGVmaW5lIFVJTlQ2NF9NQVggICAgICAgICBVSU5UNjRfQygxODQ0Njc0NDA3MzcwOTU1MTYxNSkKKyMgZGVmaW5lIF9fSU5UX0xFQVNUNjRfTUlOICAgSU5UNjRfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDY0X01BWCAgIElOVDY0X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUNjRfTUFYIFVJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUlOICAgSU5UNjRfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01BWCAgIElOVDY0X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMzJfTUFYIFVJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UNjRfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDY0X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQ2NF9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UNjRfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDY0X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQ2NF9NQVgKKyNlbmRpZiAvKiBfX0lOVDY0X1RZUEVfXyAqLworCisjaWZkZWYgX19JTlRfTEVBU1Q2NF9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDY0X01JTiAgIF9fSU5UX0xFQVNUNjRfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q2NF9NQVggICBfX0lOVF9MRUFTVDY0X01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDY0X01BWCBfX1VJTlRfTEVBU1Q2NF9NQVgKKyMgZGVmaW5lIElOVF9GQVNUNjRfTUlOICAgIF9fSU5UX0xFQVNUNjRfTUlOCisjIGRlZmluZSBJTlRfRkFTVDY0X01BWCAgICBfX0lOVF9MRUFTVDY0X01BWAorIyBkZWZpbmUgVUlOVF9GQVNUNjRfTUFYICBfX1VJTlRfTEVBU1Q2NF9NQVgKKyNlbmRpZiAvKiBfX0lOVF9MRUFTVDY0X01JTiAqLworCisKKyNpZmRlZiBfX0lOVDU2X1RZUEVfXworIyBkZWZpbmUgSU5UNTZfTUFYICAgICAgICAgICBJTlQ1Nl9DKDM2MDI4Nzk3MDE4OTYzOTY3KQorIyBkZWZpbmUgSU5UNTZfTUlOICAgICAgICAgKC1JTlQ1Nl9DKDM2MDI4Nzk3MDE4OTYzOTY3KS0xKQorIyBkZWZpbmUgVUlOVDU2X01BWCAgICAgICAgIFVJTlQ1Nl9DKDcyMDU3NTk0MDM3OTI3OTM1KQorIyBkZWZpbmUgSU5UX0xFQVNUNTZfTUlOICAgICBJTlQ1Nl9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDU2X01BWCAgICAgSU5UNTZfTUFYCisjIGRlZmluZSBVSU5UX0xFQVNUNTZfTUFYICAgVUlOVDU2X01BWAorIyBkZWZpbmUgSU5UX0ZBU1Q1Nl9NSU4gICAgICBJTlQ1Nl9NSU4KKyMgZGVmaW5lIElOVF9GQVNUNTZfTUFYICAgICAgSU5UNTZfTUFYCisjIGRlZmluZSBVSU5UX0ZBU1Q1Nl9NQVggICAgVUlOVDU2X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NSU4gICBJTlQ1Nl9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUFYICAgSU5UNTZfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QzMl9NQVggVUlOVDU2X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NSU4gICBJTlQ1Nl9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUFYICAgSU5UNTZfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QxNl9NQVggVUlOVDU2X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01JTiAgICBJTlQ1Nl9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UNTZfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDU2X01BWAorI2VuZGlmIC8qIF9fSU5UNTZfVFlQRV9fICovCisKKworI2lmZGVmIF9fSU5UNDhfVFlQRV9fCisjIGRlZmluZSBJTlQ0OF9NQVggICAgICAgICAgIElOVDQ4X0MoMTQwNzM3NDg4MzU1MzI3KQorIyBkZWZpbmUgSU5UNDhfTUlOICAgICAgICAgKC1JTlQ0OF9DKDE0MDczNzQ4ODM1NTMyNyktMSkKKyMgZGVmaW5lIFVJTlQ0OF9NQVggICAgICAgICBVSU5UNDhfQygyODE0NzQ5NzY3MTA2NTUpCisjIGRlZmluZSBJTlRfTEVBU1Q0OF9NSU4gICAgIElOVDQ4X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUNDhfTUFYICAgICBJTlQ0OF9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1Q0OF9NQVggICBVSU5UNDhfTUFYCisjIGRlZmluZSBJTlRfRkFTVDQ4X01JTiAgICAgIElOVDQ4X01JTgorIyBkZWZpbmUgSU5UX0ZBU1Q0OF9NQVggICAgICBJTlQ0OF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDQ4X01BWCAgICBVSU5UNDhfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01JTiAgIElOVDQ4X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NQVggICBJTlQ0OF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDMyX01BWCBVSU5UNDhfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDQ4X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQ0OF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UNDhfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDQ4X01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQ0OF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UNDhfTUFYCisjZW5kaWYgLyogX19JTlQ0OF9UWVBFX18gKi8KKworCisjaWZkZWYgX19JTlQ0MF9UWVBFX18KKyMgZGVmaW5lIElOVDQwX01BWCAgICAgICAgICAgSU5UNDBfQyg1NDk3NTU4MTM4ODcpCisjIGRlZmluZSBJTlQ0MF9NSU4gICAgICAgICAoLUlOVDQwX0MoNTQ5NzU1ODEzODg3KS0xKQorIyBkZWZpbmUgVUlOVDQwX01BWCAgICAgICAgIFVJTlQ0MF9DKDEwOTk1MTE2Mjc3NzUpCisjIGRlZmluZSBJTlRfTEVBU1Q0MF9NSU4gICAgIElOVDQwX01JTgorIyBkZWZpbmUgSU5UX0xFQVNUNDBfTUFYICAgICBJTlQ0MF9NQVgKKyMgZGVmaW5lIFVJTlRfTEVBU1Q0MF9NQVggICBVSU5UNDBfTUFYCisjIGRlZmluZSBJTlRfRkFTVDQwX01JTiAgICAgIElOVDQwX01JTgorIyBkZWZpbmUgSU5UX0ZBU1Q0MF9NQVggICAgICBJTlQ0MF9NQVgKKyMgZGVmaW5lIFVJTlRfRkFTVDQwX01BWCAgICBVSU5UNDBfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01JTiAgIElOVDQwX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QzMl9NQVggICBJTlQ0MF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDMyX01BWCBVSU5UNDBfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01JTiAgIElOVDQwX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NQVggICBJTlQ0MF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDE2X01BWCBVSU5UNDBfTUFYCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUlOICAgIElOVDQwX01JTgorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01BWCAgICBJTlQ0MF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UNDBfTUFYCisjZW5kaWYgLyogX19JTlQ0MF9UWVBFX18gKi8KKworCisjaWZkZWYgX19JTlQzMl9UWVBFX18KKyMgZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgSU5UMzJfQygyMTQ3NDgzNjQ3KQorIyBkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgKC1JTlQzMl9DKDIxNDc0ODM2NDcpLTEpCisjIGRlZmluZSBVSU5UMzJfTUFYICAgICAgICAgVUlOVDMyX0MoNDI5NDk2NzI5NSkKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMzJfTUlOICAgSU5UMzJfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDMyX01BWCAgIElOVDMyX01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMzJfTUFYIFVJTlQzMl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UMzJfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDMyX01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQzMl9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UMzJfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDMyX01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQzMl9NQVgKKyNlbmRpZiAvKiBfX0lOVDMyX1RZUEVfXyAqLworCisjaWZkZWYgX19JTlRfTEVBU1QzMl9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDMyX01JTiAgIF9fSU5UX0xFQVNUMzJfTUlOCisjIGRlZmluZSBJTlRfTEVBU1QzMl9NQVggICBfX0lOVF9MRUFTVDMyX01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDMyX01BWCBfX1VJTlRfTEVBU1QzMl9NQVgKKyMgZGVmaW5lIElOVF9GQVNUMzJfTUlOICAgIF9fSU5UX0xFQVNUMzJfTUlOCisjIGRlZmluZSBJTlRfRkFTVDMyX01BWCAgICBfX0lOVF9MRUFTVDMyX01BWAorIyBkZWZpbmUgVUlOVF9GQVNUMzJfTUFYICBfX1VJTlRfTEVBU1QzMl9NQVgKKyNlbmRpZiAvKiBfX0lOVF9MRUFTVDMyX01JTiAqLworCisKKyNpZmRlZiBfX0lOVDI0X1RZUEVfXworIyBkZWZpbmUgSU5UMjRfTUFYICAgICAgICAgICBJTlQyNF9DKDgzODg2MDcpCisjIGRlZmluZSBJTlQyNF9NSU4gICAgICAgICAoLUlOVDI0X0MoODM4ODYwNyktMSkKKyMgZGVmaW5lIFVJTlQyNF9NQVggICAgICAgICBVSU5UMjRfQygxNjc3NzIxNSkKKyMgZGVmaW5lIElOVF9MRUFTVDI0X01JTiAgICAgSU5UMjRfTUlOCisjIGRlZmluZSBJTlRfTEVBU1QyNF9NQVggICAgIElOVDI0X01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDI0X01BWCAgIFVJTlQyNF9NQVgKKyMgZGVmaW5lIElOVF9GQVNUMjRfTUlOICAgICAgSU5UMjRfTUlOCisjIGRlZmluZSBJTlRfRkFTVDI0X01BWCAgICAgIElOVDI0X01BWAorIyBkZWZpbmUgVUlOVF9GQVNUMjRfTUFYICAgIFVJTlQyNF9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUlOICAgSU5UMjRfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDE2X01BWCAgIElOVDI0X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUMTZfTUFYIFVJTlQyNF9NQVgKKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UMjRfTUlOCisjIGRlZmluZSBfX0lOVF9MRUFTVDhfTUFYICAgIElOVDI0X01BWAorIyBkZWZpbmUgX19VSU5UX0xFQVNUOF9NQVggIFVJTlQyNF9NQVgKKyNlbmRpZiAvKiBfX0lOVDI0X1RZUEVfXyAqLworCisKKyNpZmRlZiBfX0lOVDE2X1RZUEVfXworI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICBJTlQxNl9DKDMyNzY3KQorI2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgKC1JTlQxNl9DKDMyNzY3KS0xKQorI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgIFVJTlQxNl9DKDY1NTM1KQorIyBkZWZpbmUgX19JTlRfTEVBU1QxNl9NSU4gICBJTlQxNl9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUMTZfTUFYICAgSU5UMTZfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1QxNl9NQVggVUlOVDE2X01BWAorIyBkZWZpbmUgX19JTlRfTEVBU1Q4X01JTiAgICBJTlQxNl9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UMTZfTUFYCisjIGRlZmluZSBfX1VJTlRfTEVBU1Q4X01BWCAgVUlOVDE2X01BWAorI2VuZGlmIC8qIF9fSU5UMTZfVFlQRV9fICovCisKKyNpZmRlZiBfX0lOVF9MRUFTVDE2X01JTgorIyBkZWZpbmUgSU5UX0xFQVNUMTZfTUlOICAgX19JTlRfTEVBU1QxNl9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDE2X01BWCAgIF9fSU5UX0xFQVNUMTZfTUFYCisjIGRlZmluZSBVSU5UX0xFQVNUMTZfTUFYIF9fVUlOVF9MRUFTVDE2X01BWAorIyBkZWZpbmUgSU5UX0ZBU1QxNl9NSU4gICAgX19JTlRfTEVBU1QxNl9NSU4KKyMgZGVmaW5lIElOVF9GQVNUMTZfTUFYICAgIF9fSU5UX0xFQVNUMTZfTUFYCisjIGRlZmluZSBVSU5UX0ZBU1QxNl9NQVggIF9fVUlOVF9MRUFTVDE2X01BWAorI2VuZGlmIC8qIF9fSU5UX0xFQVNUMTZfTUlOICovCisKKworI2lmZGVmIF9fSU5UOF9UWVBFX18KKyMgZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgSU5UOF9DKDEyNykKKyMgZGVmaW5lIElOVDhfTUlOICAgICAgICAgICgtSU5UOF9DKDEyNyktMSkKKyMgZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICBVSU5UOF9DKDI1NSkKKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NSU4gICAgSU5UOF9NSU4KKyMgZGVmaW5lIF9fSU5UX0xFQVNUOF9NQVggICAgSU5UOF9NQVgKKyMgZGVmaW5lIF9fVUlOVF9MRUFTVDhfTUFYICBVSU5UOF9NQVgKKyNlbmRpZiAvKiBfX0lOVDhfVFlQRV9fICovCisKKyNpZmRlZiBfX0lOVF9MRUFTVDhfTUlOCisjIGRlZmluZSBJTlRfTEVBU1Q4X01JTiAgIF9fSU5UX0xFQVNUOF9NSU4KKyMgZGVmaW5lIElOVF9MRUFTVDhfTUFYICAgX19JTlRfTEVBU1Q4X01BWAorIyBkZWZpbmUgVUlOVF9MRUFTVDhfTUFYIF9fVUlOVF9MRUFTVDhfTUFYCisjIGRlZmluZSBJTlRfRkFTVDhfTUlOICAgIF9fSU5UX0xFQVNUOF9NSU4KKyMgZGVmaW5lIElOVF9GQVNUOF9NQVggICAgX19JTlRfTEVBU1Q4X01BWAorIyBkZWZpbmUgVUlOVF9GQVNUOF9NQVggIF9fVUlOVF9MRUFTVDhfTUFYCisjZW5kaWYgLyogX19JTlRfTEVBU1Q4X01JTiAqLworCisvKiBTb21lIHV0aWxpdHkgbWFjcm9zICovCisjZGVmaW5lICBfX0lOVE5fTUlOKG4pICBfX3N0ZGludF9qb2luMyggSU5ULCBuLCBfTUlOKQorI2RlZmluZSAgX19JTlROX01BWChuKSAgX19zdGRpbnRfam9pbjMoIElOVCwgbiwgX01BWCkKKyNkZWZpbmUgX19VSU5UTl9NQVgobikgIF9fc3RkaW50X2pvaW4zKFVJTlQsIG4sIF9NQVgpCisjZGVmaW5lICBfX0lOVE5fQyhuLCB2KSBfX3N0ZGludF9qb2luMyggSU5ULCBuLCBfQyh2KSkKKyNkZWZpbmUgX19VSU5UTl9DKG4sIHYpIF9fc3RkaW50X2pvaW4zKFVJTlQsIG4sIF9DKHYpKQorCisvKiBDOTkgNy4xOC4yLjQgTGltaXRzIG9mIGludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycy4gKi8KKy8qIEM5OSA3LjE4LjMgTGltaXRzIG9mIG90aGVyIGludGVnZXIgdHlwZXMuICovCisKKyNkZWZpbmUgIElOVFBUUl9NSU4gIF9fSU5UTl9NSU4oX19JTlRQVFJfV0lEVEhfXykKKyNkZWZpbmUgIElOVFBUUl9NQVggIF9fSU5UTl9NQVgoX19JTlRQVFJfV0lEVEhfXykKKyNkZWZpbmUgVUlOVFBUUl9NQVggX19VSU5UTl9NQVgoX19JTlRQVFJfV0lEVEhfXykKKyNkZWZpbmUgUFRSRElGRl9NSU4gIF9fSU5UTl9NSU4oX19QVFJESUZGX1dJRFRIX18pCisjZGVmaW5lIFBUUkRJRkZfTUFYICBfX0lOVE5fTUFYKF9fUFRSRElGRl9XSURUSF9fKQorI2RlZmluZSAgICBTSVpFX01BWCBfX1VJTlROX01BWChfX1NJWkVfV0lEVEhfXykKKworLyogSVNPOTg5OToyMDExIDcuMjAgKEMxMSBBbm5leCBLKTogRGVmaW5lIFJTSVpFX01BWCBpZiBfX1NURENfV0FOVF9MSUJfRVhUMV9fCisgKiBpcyBlbmFibGVkLiAqLworI2lmIGRlZmluZWQoX19TVERDX1dBTlRfTElCX0VYVDFfXykgJiYgX19TVERDX1dBTlRfTElCX0VYVDFfXyA+PSAxCisjZGVmaW5lICAgUlNJWkVfTUFYICAgICAgICAgICAgKFNJWkVfTUFYID4+IDEpCisjZW5kaWYKKworLyogQzk5IDcuMTguMi41IExpbWl0cyBvZiBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzLiAqLworI2RlZmluZSBJTlRNQVhfTUlOICAgX19JTlROX01JTihfX0lOVE1BWF9XSURUSF9fKQorI2RlZmluZSBJTlRNQVhfTUFYICAgX19JTlROX01BWChfX0lOVE1BWF9XSURUSF9fKQorI2RlZmluZSBVSU5UTUFYX01BWCBfX1VJTlROX01BWChfX0lOVE1BWF9XSURUSF9fKQorCisvKiBDOTkgNy4xOC4zIExpbWl0cyBvZiBvdGhlciBpbnRlZ2VyIHR5cGVzLiAqLworI2RlZmluZSBTSUdfQVRPTUlDX01JTiBfX0lOVE5fTUlOKF9fU0lHX0FUT01JQ19XSURUSF9fKQorI2RlZmluZSBTSUdfQVRPTUlDX01BWCBfX0lOVE5fTUFYKF9fU0lHX0FUT01JQ19XSURUSF9fKQorI2lmZGVmIF9fV0lOVF9VTlNJR05FRF9fCisjIGRlZmluZSBXSU5UX01JTiAgICAgICBfX1VJTlROX0MoX19XSU5UX1dJRFRIX18sIDApCisjIGRlZmluZSBXSU5UX01BWCAgICAgICBfX1VJTlROX01BWChfX1dJTlRfV0lEVEhfXykKKyNlbHNlCisjIGRlZmluZSBXSU5UX01JTiAgICAgICBfX0lOVE5fTUlOKF9fV0lOVF9XSURUSF9fKQorIyBkZWZpbmUgV0lOVF9NQVggICAgICAgX19JTlROX01BWChfX1dJTlRfV0lEVEhfXykKKyNlbmRpZgorCisjaWZuZGVmIFdDSEFSX01BWAorIyBkZWZpbmUgV0NIQVJfTUFYIF9fV0NIQVJfTUFYX18KKyNlbmRpZgorI2lmbmRlZiBXQ0hBUl9NSU4KKyMgaWYgX19XQ0hBUl9NQVhfXyA9PSBfX0lOVE5fTUFYKF9fV0NIQVJfV0lEVEhfXykKKyMgIGRlZmluZSBXQ0hBUl9NSU4gX19JTlROX01JTihfX1dDSEFSX1dJRFRIX18pCisjIGVsc2UKKyMgIGRlZmluZSBXQ0hBUl9NSU4gX19VSU5UTl9DKF9fV0NIQVJfV0lEVEhfXywgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisvKiA3LjE4LjQuMiBNYWNyb3MgZm9yIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgY29uc3RhbnRzLiAqLworI2RlZmluZSBJTlRNQVhfQyh2KSAgIF9fSU5UTl9DKF9fSU5UTUFYX1dJRFRIX18sIHYpCisjZGVmaW5lIFVJTlRNQVhfQyh2KSBfX1VJTlROX0MoX19JTlRNQVhfV0lEVEhfXywgdikKKworI2VuZGlmIC8qIF9fU1REQ19IT1NURURfXyAqLworI2VuZGlmIC8qIF9fQ0xBTkdfU1RESU5UX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3Rkbm9yZXR1cm4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvc3Rkbm9yZXR1cm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2EzMDFkCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS9zdGRub3JldHVybi5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qPT09LS0tLSBzdGRub3JldHVybi5oIC0gU3RhbmRhcmQgaGVhZGVyIGZvciBub3JldHVybiBtYWNybyAtLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19TVEROT1JFVFVSTl9ICisjZGVmaW5lIF9fU1RETk9SRVRVUk5fSAorCisjZGVmaW5lIG5vcmV0dXJuIF9Ob3JldHVybgorI2RlZmluZSBfX25vcmV0dXJuX2lzX2RlZmluZWQgMQorCisjZW5kaWYgLyogX19TVEROT1JFVFVSTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3RibWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90Ym1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODU5NjFjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90Ym1pbnRyaW4uaApAQCAtMCwwICsxLDE1NCBAQAorLyo9PT0tLS0tIHRibWludHJpbi5oIC0gVEJNIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1g4NklOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8dGJtaW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1RCTUlOVFJJTl9ICisjZGVmaW5lIF9fVEJNSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJ0Ym0iKSkpCisKKyNkZWZpbmUgX19iZXh0cmlfdTMyKGEsIGIpIFwKKyAgKCh1bnNpZ25lZCBpbnQpX19idWlsdGluX2lhMzJfYmV4dHJpX3UzMigodW5zaWduZWQgaW50KShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKGIpKSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNmaWxsX3UzMih1bnNpZ25lZCBpbnQgYSkKK3sKKyAgcmV0dXJuIGEgJiAoYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JsY2lfdTMyKHVuc2lnbmVkIGludCBhKQoreworICByZXR1cm4gYSB8IH4oYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JsY2ljX3UzMih1bnNpZ25lZCBpbnQgYSkKK3sKKyAgcmV0dXJuIH5hICYgKGEgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNtc2tfdTMyKHVuc2lnbmVkIGludCBhKQoreworICByZXR1cm4gYSBeIChhICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjc191MzIodW5zaWduZWQgaW50IGEpCit7CisgIHJldHVybiBhIHwgKGEgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNmaWxsX3UzMih1bnNpZ25lZCBpbnQgYSkKK3sKKyAgcmV0dXJuIGEgfCAoYSAtIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2Jsc2ljX3UzMih1bnNpZ25lZCBpbnQgYSkKK3sKKyAgcmV0dXJuIH5hIHwgKGEgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX190MW1za2NfdTMyKHVuc2lnbmVkIGludCBhKQoreworICByZXR1cm4gfmEgfCAoYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3R6bXNrX3UzMih1bnNpZ25lZCBpbnQgYSkKK3sKKyAgcmV0dXJuIH5hICYgKGEgLSAxKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgX19iZXh0cmlfdTY0KGEsIGIpIFwKKyAgKCh1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX2lhMzJfYmV4dHJpX3U2NCgodW5zaWduZWQgbG9uZyBsb25nKShhKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKGIpKSkKKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNmaWxsX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSkKK3sKKyAgcmV0dXJuIGEgJiAoYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JsY2lfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKQoreworICByZXR1cm4gYSB8IH4oYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2JsY2ljX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSkKK3sKKyAgcmV0dXJuIH5hICYgKGEgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibGNtc2tfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKQoreworICByZXR1cm4gYSBeIChhICsgMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfX0RFRkFVTFRfRk5fQVRUUlMKK19fYmxjc191NjQodW5zaWduZWQgbG9uZyBsb25nIGEpCit7CisgIHJldHVybiBhIHwgKGEgKyAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX19ibHNmaWxsX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSkKK3sKKyAgcmV0dXJuIGEgfCAoYSAtIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX2Jsc2ljX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSkKK3sKKyAgcmV0dXJuIH5hIHwgKGEgLSAxKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX190MW1za2NfdTY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhKQoreworICByZXR1cm4gfmEgfCAoYSArIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfX3R6bXNrX3U2NCh1bnNpZ25lZCBsb25nIGxvbmcgYSkKK3sKKyAgcmV0dXJuIH5hICYgKGEgLSAxKTsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZiAvKiBfX1RCTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3RnbWF0aC5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90Z21hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMThlMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS90Z21hdGguaApAQCAtMCwwICsxLDEzNzQgQEAKKy8qPT09LS0tLSB0Z21hdGguaCAtIFN0YW5kYXJkIGhlYWRlciBmb3IgdHlwZSBnZW5lcmljIG1hdGggLS0tLS0tLS0tLS0tLS0tLT09PSpcCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEhvd2FyZCBIaW5uYW50CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKK1wqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSovCisKKyNpZm5kZWYgX19UR01BVEhfSAorI2RlZmluZSBfX1RHTUFUSF9ICisKKy8qIEM5OSA3LjIyIFR5cGUtZ2VuZXJpYyBtYXRoIDx0Z21hdGguaD4uICovCisjaW5jbHVkZSA8bWF0aC5oPgorCisvKiBDKysgaGFuZGxlcyB0eXBlIGdlbmVyaWNpdHkgd2l0aCBvdmVybG9hZGluZyBpbiBtYXRoLmguICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8Y29tcGxleC5oPgorCisjZGVmaW5lIF9UR19BVFRSU3AgX19hdHRyaWJ1dGVfXygoX19vdmVybG9hZGFibGVfXykpCisjZGVmaW5lIF9UR19BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX292ZXJsb2FkYWJsZV9fLCBfX2Fsd2F5c19pbmxpbmVfXykpCisKKy8vIHByb21vdGlvbgorCit0eXBlZGVmIHZvaWQgX0FyZ3VtZW50X3R5cGVfaXNfbm90X2FyaXRobWV0aWM7CitzdGF0aWMgX0FyZ3VtZW50X3R5cGVfaXNfbm90X2FyaXRobWV0aWMgX190Z19wcm9tb3RlKC4uLikKKyAgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fLF9fb3ZlcmxvYWRhYmxlX18pKTsKK3N0YXRpYyBkb3VibGUgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShpbnQpOworc3RhdGljIGRvdWJsZSAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKHVuc2lnbmVkIGludCk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUobG9uZyk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgZG91YmxlICAgICAgICAgICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUobG9uZyBsb25nKTsKK3N0YXRpYyBkb3VibGUgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZSh1bnNpZ25lZCBsb25nIGxvbmcpOworc3RhdGljIGZsb2F0ICAgICAgICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGZsb2F0KTsKK3N0YXRpYyBkb3VibGUgICAgICAgICAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShkb3VibGUpOworc3RhdGljIGxvbmcgZG91YmxlICAgICAgICAgIF9UR19BVFRSU3AgX190Z19wcm9tb3RlKGxvbmcgZG91YmxlKTsKK3N0YXRpYyBmbG9hdCBfQ29tcGxleCAgICAgICBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShmbG9hdCBfQ29tcGxleCk7CitzdGF0aWMgZG91YmxlIF9Db21wbGV4ICAgICAgX1RHX0FUVFJTcCBfX3RnX3Byb21vdGUoZG91YmxlIF9Db21wbGV4KTsKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleCBfVEdfQVRUUlNwIF9fdGdfcHJvbW90ZShsb25nIGRvdWJsZSBfQ29tcGxleCk7CisKKyNkZWZpbmUgX190Z19wcm9tb3RlMShfX3gpICAgICAgICAgICAoX190eXBlb2ZfXyhfX3RnX3Byb21vdGUoX194KSkpCisjZGVmaW5lIF9fdGdfcHJvbW90ZTIoX194LCBfX3kpICAgICAgKF9fdHlwZW9mX18oX190Z19wcm9tb3RlKF9feCkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlKF9feSkpKQorI2RlZmluZSBfX3RnX3Byb21vdGUzKF9feCwgX195LCBfX3opIChfX3R5cGVvZl9fKF9fdGdfcHJvbW90ZShfX3gpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZShfX3kpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZShfX3opKSkKKworLy8gYWNvcworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Fjb3MoZmxvYXQgX194KSB7cmV0dXJuIGFjb3NmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zKGRvdWJsZSBfX3gpIHtyZXR1cm4gYWNvcyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhY29zbChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvc2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Fjb3MoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvcyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvc2woX194KTt9CisKKyN1bmRlZiBhY29zCisjZGVmaW5lIGFjb3MoX194KSBfX3RnX2Fjb3MoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gYXNpbgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2FzaW4oZmxvYXQgX194KSB7cmV0dXJuIGFzaW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXNpbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhc2lubChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2FzaW4oZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbmwoX194KTt9CisKKyN1bmRlZiBhc2luCisjZGVmaW5lIGFzaW4oX194KSBfX3RnX2FzaW4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gYXRhbgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW4oZmxvYXQgX194KSB7cmV0dXJuIGF0YW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhdGFubChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW4oZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbmwoX194KTt9CisKKyN1bmRlZiBhdGFuCisjZGVmaW5lIGF0YW4oX194KSBfX3RnX2F0YW4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gYWNvc2gKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zaChmbG9hdCBfX3gpIHtyZXR1cm4gYWNvc2hmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hY29zaChkb3VibGUgX194KSB7cmV0dXJuIGFjb3NoKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Fjb3NoKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBhY29zaGwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYWNvc2goZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhY29zaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Fjb3NoKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fjb3NoKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Fjb3NoKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYWNvc2hsKF9feCk7fQorCisjdW5kZWYgYWNvc2gKKyNkZWZpbmUgYWNvc2goX194KSBfX3RnX2Fjb3NoKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGFzaW5oCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbmgoZmxvYXQgX194KSB7cmV0dXJuIGFzaW5oZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXNpbmgoZG91YmxlIF9feCkge3JldHVybiBhc2luaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luaChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYXNpbmhsKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2FzaW5oKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYXNpbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luaChkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhc2luaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hc2luaChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FzaW5obChfX3gpO30KKworI3VuZGVmIGFzaW5oCisjZGVmaW5lIGFzaW5oKF9feCkgX190Z19hc2luaChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBhdGFuaAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW5oKGZsb2F0IF9feCkge3JldHVybiBhdGFuaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW5oKGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbmgobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGF0YW5obChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuaChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2F0YW5oZihfX3gpO30KKworc3RhdGljIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbmgoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXRhbmgoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbmgobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhdGFuaGwoX194KTt9CisKKyN1bmRlZiBhdGFuaAorI2RlZmluZSBhdGFuaChfX3gpIF9fdGdfYXRhbmgoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY29zCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zKGZsb2F0IF9feCkge3JldHVybiBjb3NmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3MoZG91YmxlIF9feCkge3JldHVybiBjb3MoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBjb3NsKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvcyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Nvc2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nvcyhkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNjb3MoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29zKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjY29zbChfX3gpO30KKworI3VuZGVmIGNvcworI2RlZmluZSBjb3MoX194KSBfX3RnX2NvcyhfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBzaW4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW4oZmxvYXQgX194KSB7cmV0dXJuIHNpbmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Npbihkb3VibGUgX194KSB7cmV0dXJuIHNpbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW4obG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHNpbmwoX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjc2luZihfX3gpO30KKworc3RhdGljIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2luKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3NpbihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW4obG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNzaW5sKF9feCk7fQorCisjdW5kZWYgc2luCisjZGVmaW5lIHNpbihfX3gpIF9fdGdfc2luKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIHRhbgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RhbihmbG9hdCBfX3gpIHtyZXR1cm4gdGFuZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGFuKGRvdWJsZSBfX3gpIHtyZXR1cm4gdGFuKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Rhbihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gdGFubChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW4oZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGN0YW5mKF9feCk7fQorCitzdGF0aWMgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW4oZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Rhbihsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3RhbmwoX194KTt9CisKKyN1bmRlZiB0YW4KKyNkZWZpbmUgdGFuKF9feCkgX190Z190YW4oX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY29zaAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nvc2goZmxvYXQgX194KSB7cmV0dXJuIGNvc2hmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3NoKGRvdWJsZSBfX3gpIHtyZXR1cm4gY29zaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3NoKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBjb3NobChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3NoKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjY29zaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nvc2goZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjY29zaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3NoKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjY29zaGwoX194KTt9CisKKyN1bmRlZiBjb3NoCisjZGVmaW5lIGNvc2goX194KSBfX3RnX2Nvc2goX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gc2luaAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NpbmgoZmxvYXQgX194KSB7cmV0dXJuIHNpbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW5oKGRvdWJsZSBfX3gpIHtyZXR1cm4gc2luaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW5oKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBzaW5obChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW5oKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjc2luaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NpbmgoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc2luaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zaW5oKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc2luaGwoX194KTt9CisKKyN1bmRlZiBzaW5oCisjZGVmaW5lIHNpbmgoX194KSBfX3RnX3NpbmgoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gdGFuaAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RhbmgoZmxvYXQgX194KSB7cmV0dXJuIHRhbmhmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW5oKGRvdWJsZSBfX3gpIHtyZXR1cm4gdGFuaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW5oKGxvbmcgZG91YmxlIF9feCkge3JldHVybiB0YW5obChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW5oKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuaGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RhbmgoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuaChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z190YW5oKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjdGFuaGwoX194KTt9CisKKyN1bmRlZiB0YW5oCisjZGVmaW5lIHRhbmgoX194KSBfX3RnX3RhbmgoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gZXhwCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwKGZsb2F0IF9feCkge3JldHVybiBleHBmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAoZG91YmxlIF9feCkge3JldHVybiBleHAoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBleHBsKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cChmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2V4cGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cChkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNleHAoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjZXhwbChfX3gpO30KKworI3VuZGVmIGV4cAorI2RlZmluZSBleHAoX194KSBfX3RnX2V4cChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsb2cKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2coZmxvYXQgX194KSB7cmV0dXJuIGxvZ2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZyhkb3VibGUgX194KSB7cmV0dXJuIGxvZyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZ2woX194KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjbG9nZihfX3gpO30KKworc3RhdGljIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2xvZyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2cobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNsb2dsKF9feCk7fQorCisjdW5kZWYgbG9nCisjZGVmaW5lIGxvZyhfX3gpIF9fdGdfbG9nKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIHBvdworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3BvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBwb3dmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Bvdyhkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIHBvdyhfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Bvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBwb3dsKF9feCwgX195KTt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfcG93KGZsb2F0IF9Db21wbGV4IF9feCwgZmxvYXQgX0NvbXBsZXggX195KSB7cmV0dXJuIGNwb3dmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3Bvdyhkb3VibGUgX0NvbXBsZXggX194LCBkb3VibGUgX0NvbXBsZXggX195KSB7cmV0dXJuIGNwb3coX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19wb3cobG9uZyBkb3VibGUgX0NvbXBsZXggX194LCBsb25nIGRvdWJsZSBfQ29tcGxleCBfX3kpCisgICAge3JldHVybiBjcG93bChfX3gsIF9feSk7fQorCisjdW5kZWYgcG93CisjZGVmaW5lIHBvdyhfX3gsIF9feSkgX190Z19wb3coX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKKworLy8gc3FydAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NxcnQoZmxvYXQgX194KSB7cmV0dXJuIHNxcnRmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19zcXJ0KGRvdWJsZSBfX3gpIHtyZXR1cm4gc3FydChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19zcXJ0KGxvbmcgZG91YmxlIF9feCkge3JldHVybiBzcXJ0bChfX3gpO30KKworc3RhdGljIGZsb2F0IF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zcXJ0KGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjc3FydGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3NxcnQoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc3FydChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zcXJ0KGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjc3FydGwoX194KTt9CisKKyN1bmRlZiBzcXJ0CisjZGVmaW5lIHNxcnQoX194KSBfX3RnX3NxcnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gZmFicworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZhYnMoZmxvYXQgX194KSB7cmV0dXJuIGZhYnNmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mYWJzKGRvdWJsZSBfX3gpIHtyZXR1cm4gZmFicyhfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mYWJzKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBmYWJzbChfX3gpO30KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19mYWJzKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjYWJzZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmFicyhkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhYnMoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmFicyhsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2Fic2woX194KTt9CisKKyN1bmRlZiBmYWJzCisjZGVmaW5lIGZhYnMoX194KSBfX3RnX2ZhYnMoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gYXRhbjIKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19hdGFuMihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBhdGFuMmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfYXRhbjIoZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBhdGFuMihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2F0YW4yKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGF0YW4ybChfX3gsIF9feSk7fQorCisjdW5kZWYgYXRhbjIKKyNkZWZpbmUgYXRhbjIoX194LCBfX3kpIF9fdGdfYXRhbjIoX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGNicnQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jYnJ0KGZsb2F0IF9feCkge3JldHVybiBjYnJ0ZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2JydChkb3VibGUgX194KSB7cmV0dXJuIGNicnQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2JydChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY2JydGwoX194KTt9CisKKyN1bmRlZiBjYnJ0CisjZGVmaW5lIGNicnQoX194KSBfX3RnX2NicnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY2VpbAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NlaWwoZmxvYXQgX194KSB7cmV0dXJuIGNlaWxmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jZWlsKGRvdWJsZSBfX3gpIHtyZXR1cm4gY2VpbChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jZWlsKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBjZWlsbChfX3gpO30KKworI3VuZGVmIGNlaWwKKyNkZWZpbmUgY2VpbChfX3gpIF9fdGdfY2VpbChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBjb3B5c2lnbgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvcHlzaWduKGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIGNvcHlzaWduZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jb3B5c2lnbihkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGNvcHlzaWduKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29weXNpZ24obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gY29weXNpZ25sKF9feCwgX195KTt9CisKKyN1bmRlZiBjb3B5c2lnbgorI2RlZmluZSBjb3B5c2lnbihfX3gsIF9feSkgX190Z19jb3B5c2lnbihfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKKworLy8gZXJmCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXJmKGZsb2F0IF9feCkge3JldHVybiBlcmZmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19lcmYoZG91YmxlIF9feCkge3JldHVybiBlcmYoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXJmKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBlcmZsKF9feCk7fQorCisjdW5kZWYgZXJmCisjZGVmaW5lIGVyZihfX3gpIF9fdGdfZXJmKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGVyZmMKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19lcmZjKGZsb2F0IF9feCkge3JldHVybiBlcmZjZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXJmYyhkb3VibGUgX194KSB7cmV0dXJuIGVyZmMoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXJmYyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gZXJmY2woX194KTt9CisKKyN1bmRlZiBlcmZjCisjZGVmaW5lIGVyZmMoX194KSBfX3RnX2VyZmMoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gZXhwMgorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cDIoZmxvYXQgX194KSB7cmV0dXJuIGV4cDJmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAyKGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwMihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19leHAyKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBleHAybChfX3gpO30KKworI3VuZGVmIGV4cDIKKyNkZWZpbmUgZXhwMihfX3gpIF9fdGdfZXhwMihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBleHBtMQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cG0xKGZsb2F0IF9feCkge3JldHVybiBleHBtMWYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2V4cG0xKGRvdWJsZSBfX3gpIHtyZXR1cm4gZXhwbTEoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZXhwbTEobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGV4cG0xbChfX3gpO30KKworI3VuZGVmIGV4cG0xCisjZGVmaW5lIGV4cG0xKF9feCkgX190Z19leHBtMShfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBmZGltCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZmRpbShmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBmZGltZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mZGltKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gZmRpbShfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZkaW0obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gZmRpbWwoX194LCBfX3kpO30KKworI3VuZGVmIGZkaW0KKyNkZWZpbmUgZmRpbShfX3gsIF9feSkgX190Z19mZGltKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKKworLy8gZmxvb3IKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbG9vcihmbG9hdCBfX3gpIHtyZXR1cm4gZmxvb3JmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbG9vcihkb3VibGUgX194KSB7cmV0dXJuIGZsb29yKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Zsb29yKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBmbG9vcmwoX194KTt9CisKKyN1bmRlZiBmbG9vcgorI2RlZmluZSBmbG9vcihfX3gpIF9fdGdfZmxvb3IoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gZm1hCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1hKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opCisgICAge3JldHVybiBmbWFmKF9feCwgX195LCBfX3opO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1hKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opCisgICAge3JldHVybiBmbWEoX194LCBfX3ksIF9feik7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtYShsb25nIGRvdWJsZSBfX3gsbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opCisgICAge3JldHVybiBmbWFsKF9feCwgX195LCBfX3opO30KKworI3VuZGVmIGZtYQorI2RlZmluZSBmbWEoX194LCBfX3ksIF9feikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX190Z19mbWEoX190Z19wcm9tb3RlMygoX194KSwgKF9feSksIChfX3opKShfX3gpLCBcCisgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTMoKF9feCksIChfX3kpLCAoX196KSkoX195KSwgXAorICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUzKChfX3gpLCAoX195KSwgKF9feikpKF9feikpCisKKy8vIGZtYXgKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbWF4KGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIGZtYXhmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtYXgoZG91YmxlIF9feCwgZG91YmxlIF9feSkge3JldHVybiBmbWF4KF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1heChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkge3JldHVybiBmbWF4bChfX3gsIF9feSk7fQorCisjdW5kZWYgZm1heAorI2RlZmluZSBmbWF4KF9feCwgX195KSBfX3RnX2ZtYXgoX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3kpKQorCisvLyBmbWluCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1pbihmbG9hdCBfX3gsIGZsb2F0IF9feSkge3JldHVybiBmbWluZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbWluKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gZm1pbihfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2ZtaW4obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gZm1pbmwoX194LCBfX3kpO30KKworI3VuZGVmIGZtaW4KKyNkZWZpbmUgZm1pbihfX3gsIF9feSkgX190Z19mbWluKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKKworLy8gZm1vZAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Ztb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHtyZXR1cm4gZm1vZGYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZm1vZChkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGZtb2QoX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIGZtb2RsKF9feCwgX195KTt9CisKKyN1bmRlZiBmbW9kCisjZGVmaW5lIGZtb2QoX194LCBfX3kpIF9fdGdfZm1vZChfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIGZyZXhwCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfZnJleHAoZmxvYXQgX194LCBpbnQqIF9feSkge3JldHVybiBmcmV4cGYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfZnJleHAoZG91YmxlIF9feCwgaW50KiBfX3kpIHtyZXR1cm4gZnJleHAoX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19mcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCogX195KSB7cmV0dXJuIGZyZXhwbChfX3gsIF9feSk7fQorCisjdW5kZWYgZnJleHAKKyNkZWZpbmUgZnJleHAoX194LCBfX3kpIF9fdGdfZnJleHAoX190Z19wcm9tb3RlMSgoX194KSkoX194KSwgX195KQorCisvLyBoeXBvdAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2h5cG90KGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIGh5cG90ZihfX3gsIF9feSk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19oeXBvdChkb3VibGUgX194LCBkb3VibGUgX195KSB7cmV0dXJuIGh5cG90KF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfaHlwb3QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHtyZXR1cm4gaHlwb3RsKF9feCwgX195KTt9CisKKyN1bmRlZiBoeXBvdAorI2RlZmluZSBoeXBvdChfX3gsIF9feSkgX190Z19oeXBvdChfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSkKKworLy8gaWxvZ2IKKworc3RhdGljIGludAorICAgIF9UR19BVFRSUworICAgIF9fdGdfaWxvZ2IoZmxvYXQgX194KSB7cmV0dXJuIGlsb2diZihfX3gpO30KKworc3RhdGljIGludAorICAgIF9UR19BVFRSUworICAgIF9fdGdfaWxvZ2IoZG91YmxlIF9feCkge3JldHVybiBpbG9nYihfX3gpO30KKworc3RhdGljIGludAorICAgIF9UR19BVFRSUworICAgIF9fdGdfaWxvZ2IobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGlsb2dibChfX3gpO30KKworI3VuZGVmIGlsb2diCisjZGVmaW5lIGlsb2diKF9feCkgX190Z19pbG9nYihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsZGV4cAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xkZXhwKGZsb2F0IF9feCwgaW50IF9feSkge3JldHVybiBsZGV4cGYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbGRleHAoZG91YmxlIF9feCwgaW50IF9feSkge3JldHVybiBsZGV4cChfX3gsIF9feSk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9feSkge3JldHVybiBsZGV4cGwoX194LCBfX3kpO30KKworI3VuZGVmIGxkZXhwCisjZGVmaW5lIGxkZXhwKF9feCwgX195KSBfX3RnX2xkZXhwKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCksIF9feSkKKworLy8gbGdhbW1hCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbGdhbW1hKGZsb2F0IF9feCkge3JldHVybiBsZ2FtbWFmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sZ2FtbWEoZG91YmxlIF9feCkge3JldHVybiBsZ2FtbWEoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbGdhbW1hKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsZ2FtbWFsKF9feCk7fQorCisjdW5kZWYgbGdhbW1hCisjZGVmaW5lIGxnYW1tYShfX3gpIF9fdGdfbGdhbW1hKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGxscmludAorCitzdGF0aWMgbG9uZyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sbHJpbnQoZmxvYXQgX194KSB7cmV0dXJuIGxscmludGYoX194KTt9CisKK3N0YXRpYyBsb25nIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xscmludChkb3VibGUgX194KSB7cmV0dXJuIGxscmludChfX3gpO30KKworc3RhdGljIGxvbmcgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbGxyaW50KGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsbHJpbnRsKF9feCk7fQorCisjdW5kZWYgbGxyaW50CisjZGVmaW5lIGxscmludChfX3gpIF9fdGdfbGxyaW50KF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGxscm91bmQKKworc3RhdGljIGxvbmcgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbGxyb3VuZChmbG9hdCBfX3gpIHtyZXR1cm4gbGxyb3VuZGYoX194KTt9CisKK3N0YXRpYyBsb25nIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xscm91bmQoZG91YmxlIF9feCkge3JldHVybiBsbHJvdW5kKF9feCk7fQorCitzdGF0aWMgbG9uZyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19sbHJvdW5kKGxvbmcgZG91YmxlIF9feCkge3JldHVybiBsbHJvdW5kbChfX3gpO30KKworI3VuZGVmIGxscm91bmQKKyNkZWZpbmUgbGxyb3VuZChfX3gpIF9fdGdfbGxyb3VuZChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsb2cxMAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzEwKGZsb2F0IF9feCkge3JldHVybiBsb2cxMGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzEwKGRvdWJsZSBfX3gpIHtyZXR1cm4gbG9nMTAoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nMTAobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZzEwbChfX3gpO30KKworI3VuZGVmIGxvZzEwCisjZGVmaW5lIGxvZzEwKF9feCkgX190Z19sb2cxMChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsb2cxcAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzFwKGZsb2F0IF9feCkge3JldHVybiBsb2cxcGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzFwKGRvdWJsZSBfX3gpIHtyZXR1cm4gbG9nMXAoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nMXAobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZzFwbChfX3gpO30KKworI3VuZGVmIGxvZzFwCisjZGVmaW5lIGxvZzFwKF9feCkgX190Z19sb2cxcChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBsb2cyCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nMihmbG9hdCBfX3gpIHtyZXR1cm4gbG9nMmYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzIoZG91YmxlIF9feCkge3JldHVybiBsb2cyKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xvZzIobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxvZzJsKF9feCk7fQorCisjdW5kZWYgbG9nMgorI2RlZmluZSBsb2cyKF9feCkgX190Z19sb2cyKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGxvZ2IKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19sb2diKGZsb2F0IF9feCkge3JldHVybiBsb2diZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nYihkb3VibGUgX194KSB7cmV0dXJuIGxvZ2IoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbG9nYihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbG9nYmwoX194KTt9CisKKyN1bmRlZiBsb2diCisjZGVmaW5lIGxvZ2IoX194KSBfX3RnX2xvZ2IoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbHJpbnQKKworc3RhdGljIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xyaW50KGZsb2F0IF9feCkge3JldHVybiBscmludGYoX194KTt9CisKK3N0YXRpYyBsb25nCisgICAgX1RHX0FUVFJTCisgICAgX190Z19scmludChkb3VibGUgX194KSB7cmV0dXJuIGxyaW50KF9feCk7fQorCitzdGF0aWMgbG9uZworICAgIF9UR19BVFRSUworICAgIF9fdGdfbHJpbnQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIGxyaW50bChfX3gpO30KKworI3VuZGVmIGxyaW50CisjZGVmaW5lIGxyaW50KF9feCkgX190Z19scmludChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBscm91bmQKKworc3RhdGljIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xyb3VuZChmbG9hdCBfX3gpIHtyZXR1cm4gbHJvdW5kZihfX3gpO30KKworc3RhdGljIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xyb3VuZChkb3VibGUgX194KSB7cmV0dXJuIGxyb3VuZChfX3gpO30KKworc3RhdGljIGxvbmcKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2xyb3VuZChsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gbHJvdW5kbChfX3gpO30KKworI3VuZGVmIGxyb3VuZAorI2RlZmluZSBscm91bmQoX194KSBfX3RnX2xyb3VuZChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBuZWFyYnlpbnQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19uZWFyYnlpbnQoZmxvYXQgX194KSB7cmV0dXJuIG5lYXJieWludGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX25lYXJieWludChkb3VibGUgX194KSB7cmV0dXJuIG5lYXJieWludChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19uZWFyYnlpbnQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIG5lYXJieWludGwoX194KTt9CisKKyN1bmRlZiBuZWFyYnlpbnQKKyNkZWZpbmUgbmVhcmJ5aW50KF9feCkgX190Z19uZWFyYnlpbnQoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gbmV4dGFmdGVyCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmV4dGFmdGVyKGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIG5leHRhZnRlcmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmV4dGFmdGVyKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gbmV4dGFmdGVyKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfbmV4dGFmdGVyKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIG5leHRhZnRlcmwoX194LCBfX3kpO30KKworI3VuZGVmIG5leHRhZnRlcgorI2RlZmluZSBuZXh0YWZ0ZXIoX194LCBfX3kpIF9fdGdfbmV4dGFmdGVyKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIG5leHR0b3dhcmQKKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19uZXh0dG93YXJkKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIG5leHR0b3dhcmRmKF9feCwgX195KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX25leHR0b3dhcmQoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIG5leHR0b3dhcmQoX194LCBfX3kpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19uZXh0dG93YXJkKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIG5leHR0b3dhcmRsKF9feCwgX195KTt9CisKKyN1bmRlZiBuZXh0dG93YXJkCisjZGVmaW5lIG5leHR0b3dhcmQoX194LCBfX3kpIF9fdGdfbmV4dHRvd2FyZChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpLCAoX195KSkKKworLy8gcmVtYWluZGVyCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmVtYWluZGVyKGZsb2F0IF9feCwgZmxvYXQgX195KSB7cmV0dXJuIHJlbWFpbmRlcmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmVtYWluZGVyKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHtyZXR1cm4gcmVtYWluZGVyKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmVtYWluZGVyKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7cmV0dXJuIHJlbWFpbmRlcmwoX194LCBfX3kpO30KKworI3VuZGVmIHJlbWFpbmRlcgorI2RlZmluZSByZW1haW5kZXIoX194LCBfX3kpIF9fdGdfcmVtYWluZGVyKF9fdGdfcHJvbW90ZTIoKF9feCksIChfX3kpKShfX3gpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Z19wcm9tb3RlMigoX194KSwgKF9feSkpKF9feSkpCisKKy8vIHJlbXF1bworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JlbXF1byhmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50KiBfX3opCisgICAge3JldHVybiByZW1xdW9mKF9feCwgX195LCBfX3opO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcmVtcXVvKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCogX196KQorICAgIHtyZXR1cm4gcmVtcXVvKF9feCwgX195LCBfX3opO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19yZW1xdW8obG9uZyBkb3VibGUgX194LGxvbmcgZG91YmxlIF9feSwgaW50KiBfX3opCisgICAge3JldHVybiByZW1xdW9sKF9feCwgX195LCBfX3opO30KKworI3VuZGVmIHJlbXF1bworI2RlZmluZSByZW1xdW8oX194LCBfX3ksIF9feikgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX3RnX3JlbXF1byhfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX194KSwgXAorICAgICAgICAgICAgICAgICAgICBfX3RnX3Byb21vdGUyKChfX3gpLCAoX195KSkoX195KSwgXAorICAgICAgICAgICAgICAgICAgICAoX196KSkKKworLy8gcmludAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JpbnQoZmxvYXQgX194KSB7cmV0dXJuIHJpbnRmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19yaW50KGRvdWJsZSBfX3gpIHtyZXR1cm4gcmludChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19yaW50KGxvbmcgZG91YmxlIF9feCkge3JldHVybiByaW50bChfX3gpO30KKworI3VuZGVmIHJpbnQKKyNkZWZpbmUgcmludChfX3gpIF9fdGdfcmludChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyByb3VuZAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JvdW5kKGZsb2F0IF9feCkge3JldHVybiByb3VuZGYoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3JvdW5kKGRvdWJsZSBfX3gpIHtyZXR1cm4gcm91bmQoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfcm91bmQobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHJvdW5kbChfX3gpO30KKworI3VuZGVmIHJvdW5kCisjZGVmaW5lIHJvdW5kKF9feCkgX190Z19yb3VuZChfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBzY2FsYm4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zY2FsYm4oZmxvYXQgX194LCBpbnQgX195KSB7cmV0dXJuIHNjYWxibmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2NhbGJuKGRvdWJsZSBfX3gsIGludCBfX3kpIHtyZXR1cm4gc2NhbGJuKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2NhbGJuKGxvbmcgZG91YmxlIF9feCwgaW50IF9feSkge3JldHVybiBzY2FsYm5sKF9feCwgX195KTt9CisKKyN1bmRlZiBzY2FsYm4KKyNkZWZpbmUgc2NhbGJuKF9feCwgX195KSBfX3RnX3NjYWxibihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpLCBfX3kpCisKKy8vIHNjYWxibG4KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19zY2FsYmxuKGZsb2F0IF9feCwgbG9uZyBfX3kpIHtyZXR1cm4gc2NhbGJsbmYoX194LCBfX3kpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2NhbGJsbihkb3VibGUgX194LCBsb25nIF9feSkge3JldHVybiBzY2FsYmxuKF9feCwgX195KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfc2NhbGJsbihsb25nIGRvdWJsZSBfX3gsIGxvbmcgX195KSB7cmV0dXJuIHNjYWxibG5sKF9feCwgX195KTt9CisKKyN1bmRlZiBzY2FsYmxuCisjZGVmaW5lIHNjYWxibG4oX194LCBfX3kpIF9fdGdfc2NhbGJsbihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpLCBfX3kpCisKKy8vIHRnYW1tYQorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RnYW1tYShmbG9hdCBfX3gpIHtyZXR1cm4gdGdhbW1hZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfdGdhbW1hKGRvdWJsZSBfX3gpIHtyZXR1cm4gdGdhbW1hKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RnYW1tYShsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gdGdhbW1hbChfX3gpO30KKworI3VuZGVmIHRnYW1tYQorI2RlZmluZSB0Z2FtbWEoX194KSBfX3RnX3RnYW1tYShfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyB0cnVuYworCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RydW5jKGZsb2F0IF9feCkge3JldHVybiB0cnVuY2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX3RydW5jKGRvdWJsZSBfX3gpIHtyZXR1cm4gdHJ1bmMoX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfdHJ1bmMobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIHRydW5jbChfX3gpO30KKworI3VuZGVmIHRydW5jCisjZGVmaW5lIHRydW5jKF9feCkgX190Z190cnVuYyhfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBjYXJnCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2FyZyhmbG9hdCBfX3gpIHtyZXR1cm4gYXRhbjJmKDAuRiwgX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcoZG91YmxlIF9feCkge3JldHVybiBhdGFuMigwLiwgX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2FyZyhsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gYXRhbjJsKDAuTCwgX194KTt9CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2FyZyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2FyZ2YoX194KTt9CisKK3N0YXRpYyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjYXJnKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NhcmcobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNhcmdsKF9feCk7fQorCisjdW5kZWYgY2FyZworI2RlZmluZSBjYXJnKF9feCkgX190Z19jYXJnKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNpbWFnCisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY2ltYWcoZmxvYXQgX194KSB7cmV0dXJuIDA7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jaW1hZyhkb3VibGUgX194KSB7cmV0dXJuIDA7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NpbWFnKGxvbmcgZG91YmxlIF9feCkge3JldHVybiAwO30KKworc3RhdGljIGZsb2F0CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jaW1hZyhmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY2ltYWdmKF9feCk7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jaW1hZyhkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNpbWFnKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NpbWFnKGxvbmcgZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjaW1hZ2woX194KTt9CisKKyN1bmRlZiBjaW1hZworI2RlZmluZSBjaW1hZyhfX3gpIF9fdGdfY2ltYWcoX190Z19wcm9tb3RlMSgoX194KSkoX194KSkKKworLy8gY29uagorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvbmooZmxvYXQgX194KSB7cmV0dXJuIF9feDt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvbmooZG91YmxlIF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvbmoobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIF9feDt9CisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY29uaihmbG9hdCBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY29uamYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvbmooZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjb25qKF9feCk7fQorCitzdGF0aWMgbG9uZyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NvbmoobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNvbmpsKF9feCk7fQorCisjdW5kZWYgY29uagorI2RlZmluZSBjb25qKF9feCkgX190Z19jb25qKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKy8vIGNwcm9qCisKK3N0YXRpYyBmbG9hdCBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3Byb2ooZmxvYXQgX194KSB7cmV0dXJuIGNwcm9qZihfX3gpO30KKworc3RhdGljIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3Byb2ooZG91YmxlIF9feCkge3JldHVybiBjcHJvaihfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlIF9Db21wbGV4CisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcHJvaihsb25nIGRvdWJsZSBfX3gpIHtyZXR1cm4gY3Byb2psKF9feCk7fQorCitzdGF0aWMgZmxvYXQgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nwcm9qKGZsb2F0IF9Db21wbGV4IF9feCkge3JldHVybiBjcHJvamYoX194KTt9CisKK3N0YXRpYyBkb3VibGUgX0NvbXBsZXgKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2Nwcm9qKGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3Byb2ooX194KTt9CisKK3N0YXRpYyBsb25nIGRvdWJsZSBfQ29tcGxleAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3Byb2oobG9uZyBkb3VibGUgX0NvbXBsZXggX194KSB7cmV0dXJuIGNwcm9qbChfX3gpO30KKworI3VuZGVmIGNwcm9qCisjZGVmaW5lIGNwcm9qKF9feCkgX190Z19jcHJvaihfX3RnX3Byb21vdGUxKChfX3gpKShfX3gpKQorCisvLyBjcmVhbAorCitzdGF0aWMgZmxvYXQKKyAgICBfVEdfQVRUUlMKKyAgICBfX3RnX2NyZWFsKGZsb2F0IF9feCkge3JldHVybiBfX3g7fQorCitzdGF0aWMgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcmVhbChkb3VibGUgX194KSB7cmV0dXJuIF9feDt9CisKK3N0YXRpYyBsb25nIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3JlYWwobG9uZyBkb3VibGUgX194KSB7cmV0dXJuIF9feDt9CisKK3N0YXRpYyBmbG9hdAorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3JlYWwoZmxvYXQgX0NvbXBsZXggX194KSB7cmV0dXJuIGNyZWFsZihfX3gpO30KKworc3RhdGljIGRvdWJsZQorICAgIF9UR19BVFRSUworICAgIF9fdGdfY3JlYWwoZG91YmxlIF9Db21wbGV4IF9feCkge3JldHVybiBjcmVhbChfX3gpO30KKworc3RhdGljIGxvbmcgZG91YmxlCisgICAgX1RHX0FUVFJTCisgICAgX190Z19jcmVhbChsb25nIGRvdWJsZSBfQ29tcGxleCBfX3gpIHtyZXR1cm4gY3JlYWxsKF9feCk7fQorCisjdW5kZWYgY3JlYWwKKyNkZWZpbmUgY3JlYWwoX194KSBfX3RnX2NyZWFsKF9fdGdfcHJvbW90ZTEoKF9feCkpKF9feCkpCisKKyN1bmRlZiBfVEdfQVRUUlNwCisjdW5kZWYgX1RHX0FUVFJTCisKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9fVEdNQVRIX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdG1taW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3RtbWludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDI4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3RtbWludHJpbi5oCkBAIC0wLDAgKzEsMjIxIEBACisvKj09PS0tLS0gdG1taW50cmluLmggLSBTU1NFMyBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fVE1NSU5UUklOX0gKKyNkZWZpbmUgX19UTU1JTlRSSU5fSAorCisjaW5jbHVkZSA8cG1taW50cmluLmg+CisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic3NzZTMiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Fic19waTgoX19tNjQgX19hKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGFic2IoKF9fdjhxaSlfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Fic19lcGk4KF9fbTEyOGkgX19hKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWJzYjEyOCgoX192MTZxaSlfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hYnNfcGkxNihfX202NCBfX2EpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wYWJzdygoX192NGhpKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWJzX2VwaTE2KF9fbTEyOGkgX19hKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWJzdzEyOCgoX192OGhpKV9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2Fic19waTMyKF9fbTY0IF9fYSkKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BhYnNkKChfX3Yyc2kpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hYnNfZXBpMzIoX19tMTI4aSBfX2EpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhYnNkMTI4KChfX3Y0c2kpX19hKTsKK30KKworI2RlZmluZSBfbW1fYWxpZ25yX2VwaTgoYSwgYiwgbikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhbGlnbnIxMjgoKF9fdjE2cWkpKF9fbTEyOGkpKGEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjE2cWkpKF9fbTEyOGkpKGIpLCAobikpOyB9KQorCisjZGVmaW5lIF9tbV9hbGlnbnJfcGk4KGEsIGIsIG4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tNjQpX19idWlsdGluX2lhMzJfcGFsaWducigoX192OHFpKShfX202NCkoYSksIChfX3Y4cWkpKF9fbTY0KShiKSwgKG4pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGhhZGR3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9lcGkzMihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BoYWRkZDEyOCgoX192NHNpKV9fYSwgKF9fdjRzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waGFkZHcoKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZF9waTMyKF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhhZGRkKChfX3Yyc2kpX19hLCAoX192MnNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9waGFkZHN3MTI4KChfX3Y4aGkpX19hLCAoX192OGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRzX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9waGFkZHN3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9lcGkxNihfX20xMjhpIF9fYSwgX19tMTI4aSBfX2IpCit7CisgICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Boc3VidzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJfZXBpMzIoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9waHN1YmQxMjgoKF9fdjRzaSlfX2EsIChfX3Y0c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1Yl9waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhzdWJ3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJfcGkzMihfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3Boc3ViZCgoX192MnNpKV9fYSwgKF9fdjJzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hzdWJzX2VwaTE2KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGhzdWJzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oc3Vic19waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGhzdWJzdygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGR1YnNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWRkdWJzX3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbWFkZHVic3coKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxocnNfZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzEyOCgoX192OGhpKV9fYSwgKF9fdjhoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxocnNfcGkxNihfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BtdWxocnN3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2h1ZmZsZV9lcGk4KF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNodWZiMTI4KChfX3YxNnFpKV9fYSwgKF9fdjE2cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2h1ZmZsZV9waTgoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2h1ZmIoKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaWduX2VwaTgoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2lnbmIxMjgoKF9fdjE2cWkpX19hLCAoX192MTZxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NpZ25fZXBpMTYoX19tMTI4aSBfX2EsIF9fbTEyOGkgX19iKQoreworICAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2lnbncxMjgoKF9fdjhoaSlfX2EsIChfX3Y4aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaWduX2VwaTMyKF9fbTEyOGkgX19hLCBfX20xMjhpIF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNpZ25kMTI4KChfX3Y0c2kpX19hLCAoX192NHNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NpZ25fcGk4KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICAgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcHNpZ25iKChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NpZ25fcGkxNihfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzaWdudygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaWduX3BpMzIoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2lnbmQoKF9fdjJzaSlfX2EsIChfX3Yyc2kpX19iKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19UTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS91bndpbmQuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdW53aW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzZDc5MgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdW53aW5kLmgKQEAgLTAsMCArMSwyODIgQEAKKy8qPT09LS0tLSB1bndpbmQuaCAtIFN0YWNrIHVud2luZGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisvKiBTZWUgIkRhdGEgRGVmaW5pdGlvbnMgZm9yIGxpYmdjY19zIiBpbiB0aGUgTGludXggU3RhbmRhcmQgQmFzZS4qLworCisjaWZuZGVmIF9fQ0xBTkdfVU5XSU5EX0gKKyNkZWZpbmUgX19DTEFOR19VTldJTkRfSAorCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9faGFzX2luY2x1ZGVfbmV4dCg8dW53aW5kLmg+KQorLyogRGFyd2luIChmcm9tIDExLnggb24pIHByb3ZpZGUgYW4gdW53aW5kLmguIElmIHRoYXQncyBhdmFpbGFibGUsCisgKiB1c2UgaXQuIGxpYnVud2luZCB3cmFwcyBzb21lIG9mIGl0cyBkZWZpbml0aW9ucyBpbiAjaWZkZWYgX0dOVV9TT1VSQ0UsCisgKiBzbyBkZWZpbmUgdGhhdCBhcm91bmQgdGhlIGluY2x1ZGUuKi8KKyMgaWZuZGVmIF9HTlVfU09VUkNFCisjICBkZWZpbmUgX1NIT1VMRF9VTkRFRklORV9HTlVfU09VUkNFCisjICBkZWZpbmUgX0dOVV9TT1VSQ0UKKyMgZW5kaWYKKy8vIGxpYnVud2luZCdzIHVud2luZC5oIHJlZmxlY3RzIHRoZSBjdXJyZW50IHZpc2liaWxpdHkuICBIb3dldmVyLCBNb3ppbGxhCisvLyBidWlsZHMgd2l0aCAtZnZpc2liaWxpdHk9aGlkZGVuIGFuZCByZWxpZXMgb24gZ2NjJ3MgdW53aW5kLmggdG8gcmVzZXQgdGhlCisvLyB2aXNpYmlsaXR5IHRvIGRlZmF1bHQgYW5kIGV4cG9ydCBpdHMgY29udGVudHMuICBnY2MgYWxzbyBhbGxvd3MgdXNlcnMgdG8KKy8vIG92ZXJyaWRlIGl0cyBvdmVycmlkZSBieSAjZGVmaW5pbmcgSElERV9FWFBPUlRTIChidXQgbm90ZSwgdGhpcyBvbmx5IG9iZXlzCisvLyB0aGUgdXNlcidzIC1mdmlzaWJpbGl0eSBzZXR0aW5nOyBpdCBkb2Vzbid0IGhpZGUgYW55IGV4cG9ydHMgb24gaXRzIG93bikuICBXZQorLy8gaW1pdGF0ZSBnY2MncyBoZWFkZXIgaGVyZToKKyMgaWZkZWYgSElERV9FWFBPUlRTCisjICBpbmNsdWRlX25leHQgPHVud2luZC5oPgorIyBlbHNlCisjICBwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorIyAgaW5jbHVkZV9uZXh0IDx1bndpbmQuaD4KKyMgIHByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKyMgZW5kaWYKKyMgaWZkZWYgX1NIT1VMRF9VTkRFRklORV9HTlVfU09VUkNFCisjICB1bmRlZiBfR05VX1NPVVJDRQorIyAgdW5kZWYgX1NIT1VMRF9VTkRFRklORV9HTlVfU09VUkNFCisjIGVuZGlmCisjZWxzZQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogSXQgaXMgYSBiaXQgc3RyYW5nZSBmb3IgYSBoZWFkZXIgdG8gcGxheSB3aXRoIHRoZSB2aXNpYmlsaXR5IG9mIHRoZQorICAgc3ltYm9scyBpdCBkZWNsYXJlcywgYnV0IHRoaXMgbWF0Y2hlcyBnY2MncyBiZWhhdmlvciBhbmQgc29tZSBwcm9ncmFtcworICAgZGVwZW5kIG9uIGl0ICovCisjaWZuZGVmIEhJREVfRVhQT1JUUworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisjZW5kaWYKKwordHlwZWRlZiB1aW50cHRyX3QgX1Vud2luZF9Xb3JkOwordHlwZWRlZiBpbnRwdHJfdCBfVW53aW5kX1N3b3JkOwordHlwZWRlZiB1aW50cHRyX3QgX1Vud2luZF9QdHI7Cit0eXBlZGVmIHVpbnRwdHJfdCBfVW53aW5kX0ludGVybmFsX1B0cjsKK3R5cGVkZWYgdWludDY0X3QgX1Vud2luZF9FeGNlcHRpb25fQ2xhc3M7CisKK3R5cGVkZWYgaW50cHRyX3QgX3NsZWIxMjhfdDsKK3R5cGVkZWYgdWludHB0cl90IF91bGViMTI4X3Q7CisKK3N0cnVjdCBfVW53aW5kX0NvbnRleHQ7CitzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb247Cit0eXBlZGVmIGVudW0geworICBfVVJDX05PX1JFQVNPTiA9IDAsCisgIF9VUkNfRk9SRUlHTl9FWENFUFRJT05fQ0FVR0hUID0gMSwKKworICBfVVJDX0ZBVEFMX1BIQVNFMl9FUlJPUiA9IDIsCisgIF9VUkNfRkFUQUxfUEhBU0UxX0VSUk9SID0gMywKKyAgX1VSQ19OT1JNQUxfU1RPUCA9IDQsCisKKyAgX1VSQ19FTkRfT0ZfU1RBQ0sgPSA1LAorICBfVVJDX0hBTkRMRVJfRk9VTkQgPSA2LAorICBfVVJDX0lOU1RBTExfQ09OVEVYVCA9IDcsCisgIF9VUkNfQ09OVElOVUVfVU5XSU5EID0gOAorfSBfVW53aW5kX1JlYXNvbl9Db2RlOworCit0eXBlZGVmIGVudW0geworICBfVUFfU0VBUkNIX1BIQVNFID0gMSwKKyAgX1VBX0NMRUFOVVBfUEhBU0UgPSAyLAorCisgIF9VQV9IQU5ETEVSX0ZSQU1FID0gNCwKKyAgX1VBX0ZPUkNFX1VOV0lORCA9IDgsCisgIF9VQV9FTkRfT0ZfU1RBQ0sgPSAxNiAvKiBnY2MgZXh0ZW5zaW9uIHRvIEMrKyBBQkkgKi8KK30gX1Vud2luZF9BY3Rpb247CisKK3R5cGVkZWYgdm9pZCAoKl9VbndpbmRfRXhjZXB0aW9uX0NsZWFudXBfRm4pKF9VbndpbmRfUmVhc29uX0NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CisKK3N0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiB7CisgIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzIGV4Y2VwdGlvbl9jbGFzczsKKyAgX1Vud2luZF9FeGNlcHRpb25fQ2xlYW51cF9GbiBleGNlcHRpb25fY2xlYW51cDsKKyAgX1Vud2luZF9Xb3JkIHByaXZhdGVfMTsKKyAgX1Vud2luZF9Xb3JkIHByaXZhdGVfMjsKKyAgLyogVGhlIEl0YW5pdW0gQUJJIHJlcXVpcmVzIHRoYXQgX1Vud2luZF9FeGNlcHRpb24gb2JqZWN0cyBhcmUgImRvdWJsZS13b3JkCisgICAqIGFsaWduZWQiLiAgR0NDIGhhcyBpbnRlcnByZXRlZCB0aGlzIHRvIG1lYW4gInVzZSB0aGUgbWF4aW11bSB1c2VmdWwKKyAgICogYWxpZ25tZW50IGZvciB0aGUgdGFyZ2V0Ijsgc28gZG8gd2UuICovCit9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKSk7CisKK3R5cGVkZWYgX1Vud2luZF9SZWFzb25fQ29kZSAoKl9VbndpbmRfU3RvcF9GbikoaW50LCBfVW53aW5kX0FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7CisKK3R5cGVkZWYgX1Vud2luZF9SZWFzb25fQ29kZSAoKl9VbndpbmRfUGVyc29uYWxpdHlfRm4pKAorICAgIGludCwgX1Vud2luZF9BY3Rpb24sIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzLCBzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwKKyAgICBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOwordHlwZWRlZiBfVW53aW5kX1BlcnNvbmFsaXR5X0ZuIF9fcGVyc29uYWxpdHlfcm91dGluZTsKKwordHlwZWRlZiBfVW53aW5kX1JlYXNvbl9Db2RlICgqX1Vud2luZF9UcmFjZV9Gbikoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsKKworI2lmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19BUFBMRV9fKQorCit0eXBlZGVmIGVudW0geworICBfVVZSU0NfQ09SRSA9IDAsICAgICAgICAvKiBpbnRlZ2VyIHJlZ2lzdGVyICovCisgIF9VVlJTQ19WRlAgPSAxLCAgICAgICAgIC8qIHZmcCAqLworICBfVVZSU0NfV01NWEQgPSAzLCAgICAgICAvKiBJbnRlbCBXTU1YIGRhdGEgcmVnaXN0ZXIgKi8KKyAgX1VWUlNDX1dNTVhDID0gNCAgICAgICAgLyogSW50ZWwgV01NWCBjb250cm9sIHJlZ2lzdGVyICovCit9IF9VbndpbmRfVlJTX1JlZ0NsYXNzOworCit0eXBlZGVmIGVudW0geworICBfVVZSU0RfVUlOVDMyID0gMCwKKyAgX1VWUlNEX1ZGUFggPSAxLAorICBfVVZSU0RfVUlOVDY0ID0gMywKKyAgX1VWUlNEX0ZMT0FUID0gNCwKKyAgX1VWUlNEX0RPVUJMRSA9IDUKK30gX1Vud2luZF9WUlNfRGF0YVJlcHJlc2VudGF0aW9uOworCit0eXBlZGVmIGVudW0geworICBfVVZSU1JfT0sgPSAwLAorICBfVVZSU1JfTk9UX0lNUExFTUVOVEVEID0gMSwKKyAgX1VWUlNSX0ZBSUxFRCA9IDIKK30gX1Vud2luZF9WUlNfUmVzdWx0OworCitfVW53aW5kX1ZSU19SZXN1bHQgX1Vud2luZF9WUlNfR2V0KHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9fY29udGV4dCwKKyAgX1Vud2luZF9WUlNfUmVnQ2xhc3MgX19yZWdjbGFzcywKKyAgdWludDMyX3QgX19yZWdubywKKyAgX1Vud2luZF9WUlNfRGF0YVJlcHJlc2VudGF0aW9uIF9fcmVwcmVzZW50YXRpb24sCisgIHZvaWQgKl9fdmFsdWVwKTsKKworX1Vud2luZF9WUlNfUmVzdWx0IF9VbndpbmRfVlJTX1NldChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpfX2NvbnRleHQsCisgIF9VbndpbmRfVlJTX1JlZ0NsYXNzIF9fcmVnY2xhc3MsCisgIHVpbnQzMl90IF9fcmVnbm8sCisgIF9VbndpbmRfVlJTX0RhdGFSZXByZXNlbnRhdGlvbiBfX3JlcHJlc2VudGF0aW9uLAorICB2b2lkICpfX3ZhbHVlcCk7CisKK3N0YXRpYyBfX2lubGluZV9fCitfVW53aW5kX1dvcmQgX1Vud2luZF9HZXRHUihzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpfX2NvbnRleHQsIGludCBfX2luZGV4KSB7CisgIF9VbndpbmRfV29yZCBfX3ZhbHVlOworICBfVW53aW5kX1ZSU19HZXQoX19jb250ZXh0LCBfVVZSU0NfQ09SRSwgX19pbmRleCwgX1VWUlNEX1VJTlQzMiwgJl9fdmFsdWUpOworICByZXR1cm4gX192YWx1ZTsKK30KKworc3RhdGljIF9faW5saW5lX18KK3ZvaWQgX1Vud2luZF9TZXRHUihzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpfX2NvbnRleHQsIGludCBfX2luZGV4LAorICAgICAgICAgICAgICAgICAgIF9VbndpbmRfV29yZCBfX3ZhbHVlKSB7CisgIF9VbndpbmRfVlJTX1NldChfX2NvbnRleHQsIF9VVlJTQ19DT1JFLCBfX2luZGV4LCBfVVZSU0RfVUlOVDMyLCAmX192YWx1ZSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fCitfVW53aW5kX1dvcmQgX1Vud2luZF9HZXRJUChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpfX2NvbnRleHQpIHsKKyAgX1Vud2luZF9Xb3JkIF9faXAgPSBfVW53aW5kX0dldEdSKF9fY29udGV4dCwgMTUpOworICByZXR1cm4gX19pcCAmIH4oX1Vud2luZF9Xb3JkKSgweDEpOyAvKiBSZW1vdmUgdGh1bWIgbW9kZSBiaXQuICovCit9CisKK3N0YXRpYyBfX2lubGluZV9fCit2b2lkIF9VbndpbmRfU2V0SVAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqX19jb250ZXh0LCBfVW53aW5kX1dvcmQgX192YWx1ZSkgeworICBfVW53aW5kX1dvcmQgX190aHVtYl9tb2RlX2JpdCA9IF9VbndpbmRfR2V0R1IoX19jb250ZXh0LCAxNSkgJiAweDE7CisgIF9VbndpbmRfU2V0R1IoX19jb250ZXh0LCAxNSwgX192YWx1ZSB8IF9fdGh1bWJfbW9kZV9iaXQpOworfQorI2Vsc2UKK19VbndpbmRfV29yZCBfVW53aW5kX0dldEdSKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgaW50KTsKK3ZvaWQgX1Vud2luZF9TZXRHUihzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIGludCwgX1Vud2luZF9Xb3JkKTsKKworX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0SVAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKK3ZvaWQgX1Vud2luZF9TZXRJUChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIF9VbndpbmRfV29yZCk7CisjZW5kaWYKKworCitfVW53aW5kX1dvcmQgX1Vud2luZF9HZXRJUEluZm8oc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCBpbnQgKik7CisKK19VbndpbmRfV29yZCBfVW53aW5kX0dldENGQShzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworCitfVW53aW5kX1dvcmQgX1Vud2luZF9HZXRCU1Aoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKwordm9pZCAqX1Vud2luZF9HZXRMYW5ndWFnZVNwZWNpZmljRGF0YShzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworCitfVW53aW5kX1B0ciBfVW53aW5kX0dldFJlZ2lvblN0YXJ0KHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CisKKy8qIERXQVJGIEVIIGZ1bmN0aW9uczsgY3VycmVudGx5IG5vdCBhdmFpbGFibGUgb24gRGFyd2luL0FSTSAqLworI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgfHwgIWRlZmluZWQoX19hcm1fXykKKworX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX1JhaXNlRXhjZXB0aW9uKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKK19VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9Gb3JjZWRVbndpbmQoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9VbndpbmRfU3RvcF9Gbiwgdm9pZCAqKTsKK3ZvaWQgX1Vud2luZF9EZWxldGVFeGNlcHRpb24oc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOwordm9pZCBfVW53aW5kX1Jlc3VtZShzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CitfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfUmVzdW1lX29yX1JldGhyb3coc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOworCisjZW5kaWYKKworX1Vud2luZF9SZWFzb25fQ29kZSBfVW53aW5kX0JhY2t0cmFjZShfVW53aW5kX1RyYWNlX0ZuLCB2b2lkICopOworCisvKiBzZXRqbXAoMykvbG9uZ2ptcCgzKSBzdHVmZiAqLwordHlwZWRlZiBzdHJ1Y3QgU2pMal9GdW5jdGlvbl9Db250ZXh0ICpfVW53aW5kX0Z1bmN0aW9uQ29udGV4dF90OworCit2b2lkIF9VbndpbmRfU2pMal9SZWdpc3RlcihfVW53aW5kX0Z1bmN0aW9uQ29udGV4dF90KTsKK3ZvaWQgX1Vud2luZF9TakxqX1VucmVnaXN0ZXIoX1Vud2luZF9GdW5jdGlvbkNvbnRleHRfdCk7CitfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfU2pMal9SYWlzZUV4Y2VwdGlvbihzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CitfVW53aW5kX1JlYXNvbl9Db2RlIF9VbndpbmRfU2pMal9Gb3JjZWRVbndpbmQoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Vud2luZF9TdG9wX0ZuLCB2b2lkICopOwordm9pZCBfVW53aW5kX1NqTGpfUmVzdW1lKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKK19VbndpbmRfUmVhc29uX0NvZGUgX1Vud2luZF9TakxqX1Jlc3VtZV9vcl9SZXRocm93KHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKKwordm9pZCAqX1Vud2luZF9GaW5kRW5jbG9zaW5nRnVuY3Rpb24odm9pZCAqKTsKKworI2lmZGVmIF9fQVBQTEVfXworCitfVW53aW5kX1B0ciBfVW53aW5kX0dldERhdGFSZWxCYXNlKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKikKKyAgICBfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKK19VbndpbmRfUHRyIF9VbndpbmRfR2V0VGV4dFJlbEJhc2Uoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKQorICAgIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOworCisvKiBEYXJ3aW4tc3BlY2lmaWMgZnVuY3Rpb25zICovCit2b2lkIF9fcmVnaXN0ZXJfZnJhbWUoY29uc3Qgdm9pZCAqKTsKK3ZvaWQgX19kZXJlZ2lzdGVyX2ZyYW1lKGNvbnN0IHZvaWQgKik7CisKK3N0cnVjdCBkd2FyZl9laF9iYXNlcyB7CisgIHVpbnRwdHJfdCB0YmFzZTsKKyAgdWludHB0cl90IGRiYXNlOworICB1aW50cHRyX3QgZnVuYzsKK307Cit2b2lkICpfVW53aW5kX0ZpbmRfRkRFKGNvbnN0IHZvaWQgKiwgc3RydWN0IGR3YXJmX2VoX2Jhc2VzICopOworCit2b2lkIF9fcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcyhjb25zdCB2b2lkICosIHZvaWQgKiwgdm9pZCAqLCB2b2lkICopCisgIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwordm9pZCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8oY29uc3Qgdm9pZCAqLCB2b2lkICopIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwordm9pZCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fdGFibGVfYmFzZXMoY29uc3Qgdm9pZCAqLCB2b2lkKiwgdm9pZCAqLCB2b2lkICopCisgIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwordm9pZCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fdGFibGUoY29uc3Qgdm9pZCAqLCB2b2lkICopCisgIF9fYXR0cmlidXRlX18oKF9fdW5hdmFpbGFibGVfXykpOwordm9pZCBfX3JlZ2lzdGVyX2ZyYW1lX3RhYmxlKGNvbnN0IHZvaWQgKikgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7Cit2b2lkIF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvKGNvbnN0IHZvaWQgKikgX19hdHRyaWJ1dGVfXygoX191bmF2YWlsYWJsZV9fKSk7Cit2b2lkIF9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzKGNvbnN0IHZvaWQgKilfX2F0dHJpYnV0ZV9fKChfX3VuYXZhaWxhYmxlX18pKTsKKworI2Vsc2UKKworX1Vud2luZF9QdHIgX1Vud2luZF9HZXREYXRhUmVsQmFzZShzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworX1Vud2luZF9QdHIgX1Vud2luZF9HZXRUZXh0UmVsQmFzZShzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworCisjZW5kaWYKKworCisjaWZuZGVmIEhJREVfRVhQT1JUUworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ0xBTkdfVU5XSU5EX0ggKi8KZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmFkZWZzLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZhZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZTlhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZhZGVmcy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qID09PS0tLS0tLS0tIHZhZGVmcy5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyogT25seSBpbmNsdWRlIHRoaXMgaWYgd2UgYXJlIGFpbWluZyBmb3IgTVNWQyBjb21wYXRpYmlsaXR5LiAqLworI2lmbmRlZiBfTVNDX1ZFUgorI2luY2x1ZGVfbmV4dCA8dmFkZWZzLmg+CisjZWxzZQorCisjaWZuZGVmIF9fY2xhbmdfdmFkZWZzX2gKKyNkZWZpbmUgX19jbGFuZ192YWRlZnNfaAorCisjaW5jbHVkZV9uZXh0IDx2YWRlZnMuaD4KKworLyogT3ZlcnJpZGUgbWFjcm9zIGZyb20gdmFkZWZzLmggd2l0aCBkZWZpbml0aW9ucyB0aGF0IHdvcmsgd2l0aCBDbGFuZy4gKi8KKyNpZmRlZiBfY3J0X3ZhX3N0YXJ0CisjdW5kZWYgX2NydF92YV9zdGFydAorI2RlZmluZSBfY3J0X3ZhX3N0YXJ0KGFwLCBwYXJhbSkgX19idWlsdGluX3ZhX3N0YXJ0KGFwLCBwYXJhbSkKKyNlbmRpZgorI2lmZGVmIF9jcnRfdmFfZW5kCisjdW5kZWYgX2NydF92YV9lbmQKKyNkZWZpbmUgX2NydF92YV9lbmQoYXApICAgICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXApCisjZW5kaWYKKyNpZmRlZiBfY3J0X3ZhX2FyZworI3VuZGVmIF9jcnRfdmFfYXJnCisjZGVmaW5lIF9jcnRfdmFfYXJnKGFwLCB0eXBlKSAgICBfX2J1aWx0aW5fdmFfYXJnKGFwLCB0eXBlKQorI2VuZGlmCisKKy8qIFZTIDIwMTUgc3dpdGNoZWQgdG8gZG91YmxlIHVuZGVyc2NvcmUgbmFtZXMsIHdoaWNoIGlzIGFuIGltcHJvdmVtZW50LCBidXQgbm93CisgKiB3ZSBoYXZlIHRvIGludGVyY2VwdCB0aG9zZSBuYW1lcyB0b28uCisgKi8KKyNpZmRlZiBfX2NydF92YV9zdGFydAorI3VuZGVmIF9fY3J0X3ZhX3N0YXJ0CisjZGVmaW5lIF9fY3J0X3ZhX3N0YXJ0KGFwLCBwYXJhbSkgX19idWlsdGluX3ZhX3N0YXJ0KGFwLCBwYXJhbSkKKyNlbmRpZgorI2lmZGVmIF9fY3J0X3ZhX2VuZAorI3VuZGVmIF9fY3J0X3ZhX2VuZAorI2RlZmluZSBfX2NydF92YV9lbmQoYXApICAgICAgICAgIF9fYnVpbHRpbl92YV9lbmQoYXApCisjZW5kaWYKKyNpZmRlZiBfX2NydF92YV9hcmcKKyN1bmRlZiBfX2NydF92YV9hcmcKKyNkZWZpbmUgX19jcnRfdmFfYXJnKGFwLCB0eXBlKSAgICBfX2J1aWx0aW5fdmFfYXJnKGFwLCB0eXBlKQorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZhcmFyZ3MuaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmFyYXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDc3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3ZhcmFyZ3MuaApAQCAtMCwwICsxLDI2IEBACisvKj09PS0tLS0gdmFyYXJncy5oIC0gVmFyaWFibGUgYXJndW1lbnQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorKgorKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyoKKyogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisqCisqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisqIFRIRSBTT0ZUV0FSRS4KKyoKKyo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorKi8KKyNpZm5kZWYgX19WQVJBUkdTX0gKKyNkZWZpbmUgX19WQVJBUkdTX0gKKyAgI2Vycm9yICJQbGVhc2UgdXNlIDxzdGRhcmcuaD4gaW5zdGVhZCBvZiA8dmFyYXJncy5oPiIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS92ZWNpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmVjaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3YWNiNAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvdmVjaW50cmluLmgKQEAgLTAsMCArMSw4OTQ2IEBACisvKj09PS0tLS0gdmVjaW50cmluLmggLSBWZWN0b3IgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWYgZGVmaW5lZChfX3MzOTB4X18pICYmIGRlZmluZWQoX19WRUNfXykKKworI2RlZmluZSBfX0FUVFJTX2FpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKyNkZWZpbmUgX19BVFRSU19vIF9fYXR0cmlidXRlX18oKF9fb3ZlcmxvYWRhYmxlX18pKQorI2RlZmluZSBfX0FUVFJTX29fYWkgX19hdHRyaWJ1dGVfXygoX19vdmVybG9hZGFibGVfXywgX19hbHdheXNfaW5saW5lX18pKQorCisjZGVmaW5lIF9fY29uc3RhbnQoUEFSTSkgXAorICBfX2F0dHJpYnV0ZV9fKChfX2VuYWJsZV9pZl9fICgoUEFSTSkgPT0gKFBBUk0pLCBcCisgICAgICJhcmd1bWVudCBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciIpKSkKKyNkZWZpbmUgX19jb25zdGFudF9yYW5nZShQQVJNLCBMT1csIEhJR0gpIFwKKyAgX19hdHRyaWJ1dGVfXygoX19lbmFibGVfaWZfXyAoKFBBUk0pID49IChMT1cpICYmIChQQVJNKSA8PSAoSElHSCksIFwKKyAgICAgImFyZ3VtZW50IG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGZyb20gIiAjTE9XICIgdG8gIiAjSElHSCkpKQorI2RlZmluZSBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoUEFSTSwgTE9XLCBISUdIKSBcCisgIF9fYXR0cmlidXRlX18oKF9fZW5hYmxlX2lmX18gKChQQVJNKSA+PSAoTE9XKSAmJiAoUEFSTSkgPD0gKEhJR0gpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQQVJNKSAmICgoUEFSTSkgLSAxKSkgPT0gMCwgXAorICAgICAiYXJndW1lbnQgbXVzdCBiZSBhIGNvbnN0YW50IHBvd2VyIG9mIDIgZnJvbSAiICNMT1cgIiB0byAiICNISUdIKSkpCisKKy8qLS0gX19sY2JiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIF9fQVRUUlNfbyB1bnNpZ25lZCBpbnQKK19fbGNiYihjb25zdCB2b2lkICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCisjZGVmaW5lIF9fbGNiYihYLCBZKSAoKF9fdHlwZW9mX18oKF9fbGNiYikoKFgpLCAoWSkpKSkgXAorICBfX2J1aWx0aW5fczM5MF9sY2JiKChYKSwgX19idWlsdGluX2NvbnN0YW50X3AoKFkpKT8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChZKSA9PSA2NCA/IDAgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDEyOCA/IDEgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDI1NiA/IDIgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDUxMiA/IDMgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDEwMjQgPyA0IDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAyMDQ4ID8gNSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gNDA5NiA/IDYgOiAwKSA6IDApKQorCisvKi0tIHZlY19leHRyYWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHNpZ25lZCBjaGFyCit2ZWNfZXh0cmFjdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgMTVdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBjaGFyCit2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDE1XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgY2hhcgordmVjX2V4dHJhY3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgMTVdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBzaWduZWQgc2hvcnQKK3ZlY19leHRyYWN0KHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgN107Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIHNob3J0Cit2ZWNfZXh0cmFjdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiA3XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgc2hvcnQKK3ZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiA3XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgc2lnbmVkIGludAordmVjX2V4dHJhY3QodmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgM107Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHVuc2lnbmVkIGludAordmVjX2V4dHJhY3QodmVjdG9yIGJvb2wgaW50IF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDNdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBpbnQKK3ZlY19leHRyYWN0KHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgM107Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19leHRyYWN0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDFdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19leHRyYWN0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgcmV0dXJuIF9fdmVjW19faW5kZXggJiAxXTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfZXh0cmFjdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjLCBpbnQgX19pbmRleCkgeworICByZXR1cm4gX192ZWNbX19pbmRleCAmIDFdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBkb3VibGUKK3ZlY19leHRyYWN0KHZlY3RvciBkb3VibGUgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHJldHVybiBfX3ZlY1tfX2luZGV4ICYgMV07Cit9CisKKy8qLS0gdmVjX2luc2VydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfaW5zZXJ0KHNpZ25lZCBjaGFyIF9fc2NhbGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMsIGludCBfX2luZGV4KSB7CisgIF9fdmVjW19faW5kZXggJiAxNV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2luc2VydCh1bnNpZ25lZCBjaGFyIF9fc2NhbGFyLCB2ZWN0b3IgYm9vbCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX25ld3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3ZlYzsKKyAgX19uZXd2ZWNbX19pbmRleCAmIDE1XSA9ICh1bnNpZ25lZCBjaGFyKV9fc2NhbGFyOworICByZXR1cm4gX19uZXd2ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfaW5zZXJ0KHVuc2lnbmVkIGNoYXIgX19zY2FsYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgMTVdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2luc2VydChzaWduZWQgc2hvcnQgX19zY2FsYXIsIHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIF9fdmVjW19faW5kZXggJiA3XSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2luc2VydCh1bnNpZ25lZCBzaG9ydCBfX3NjYWxhciwgdmVjdG9yIGJvb2wgc2hvcnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX25ld3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX192ZWM7CisgIF9fbmV3dmVjW19faW5kZXggJiA3XSA9ICh1bnNpZ25lZCBzaG9ydClfX3NjYWxhcjsKKyAgcmV0dXJuIF9fbmV3dmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19pbnNlcnQodW5zaWduZWQgc2hvcnQgX19zY2FsYXIsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgX192ZWNbX19pbmRleCAmIDddID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19pbnNlcnQoc2lnbmVkIGludCBfX3NjYWxhciwgdmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIF9fdmVjW19faW5kZXggJiAzXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19pbnNlcnQodW5zaWduZWQgaW50IF9fc2NhbGFyLCB2ZWN0b3IgYm9vbCBpbnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19uZXd2ZWMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX3ZlYzsKKyAgX19uZXd2ZWNbX19pbmRleCAmIDNdID0gX19zY2FsYXI7CisgIHJldHVybiBfX25ld3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2luc2VydCh1bnNpZ25lZCBpbnQgX19zY2FsYXIsIHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIGludCBfX2luZGV4KSB7CisgIF9fdmVjW19faW5kZXggJiAzXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfaW5zZXJ0KHNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjLAorICAgICAgICAgICBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhciwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fdmVjLAorICAgICAgICAgICBpbnQgX19pbmRleCkgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fbmV3dmVjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX192ZWM7CisgIF9fbmV3dmVjW19faW5kZXggJiAxXSA9IF9fc2NhbGFyOworICByZXR1cm4gX19uZXd2ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19pbnNlcnQodW5zaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjLAorICAgICAgICAgICBpbnQgX19pbmRleCkgeworICBfX3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfaW5zZXJ0KGRvdWJsZSBfX3NjYWxhciwgdmVjdG9yIGRvdWJsZSBfX3ZlYywgaW50IF9faW5kZXgpIHsKKyAgX192ZWNbX19pbmRleCAmIDFdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworLyotLSB2ZWNfcHJvbW90ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19wcm9tb3RlKHNpZ25lZCBjaGFyIF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgX196ZXJvID0gKHZlY3RvciBzaWduZWQgY2hhcikwOworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKKyAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiAxNV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3Byb21vdGUodW5zaWduZWQgY2hhciBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX196ZXJvID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKTA7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpOworICBfX3ZlY1tfX2luZGV4ICYgMTVdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3Byb21vdGUoc2lnbmVkIHNob3J0IF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KTA7CisgIHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDddID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcHJvbW90ZSh1bnNpZ25lZCBzaG9ydCBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9femVybyA9ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpMDsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDddID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19wcm9tb3RlKHNpZ25lZCBpbnQgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciBzaWduZWQgaW50IF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIGludCkwOworICB2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDNdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3Byb21vdGUodW5zaWduZWQgaW50IF9fc2NhbGFyLCBpbnQgX19pbmRleCkgeworICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50IF9femVybyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KTA7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX3plcm8sIF9femVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xKTsKKyAgX192ZWNbX19pbmRleCAmIDNdID0gX19zY2FsYXI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19wcm9tb3RlKHNpZ25lZCBsb25nIGxvbmcgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9femVybyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykwOworICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSk7CisgIF9fdmVjW19faW5kZXggJiAxXSA9IF9fc2NhbGFyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19wcm9tb3RlKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3NjYWxhciwgaW50IF9faW5kZXgpIHsKKyAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3plcm8gPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykwOworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjID0gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX196ZXJvLCBfX3plcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEpOworICBfX3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfcHJvbW90ZShkb3VibGUgX19zY2FsYXIsIGludCBfX2luZGV4KSB7CisgIGNvbnN0IHZlY3RvciBkb3VibGUgX196ZXJvID0gKHZlY3RvciBkb3VibGUpMDsKKyAgdmVjdG9yIGRvdWJsZSBfX3ZlYyA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9femVybywgX196ZXJvLCAtMSwgLTEpOworICBfX3ZlY1tfX2luZGV4ICYgMV0gPSBfX3NjYWxhcjsKKyAgcmV0dXJuIF9fdmVjOworfQorCisvKi0tIHZlY19pbnNlcnRfYW5kX3plcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2luc2VydF9hbmRfemVybyhjb25zdCBzaWduZWQgY2hhciAqX19wdHIpIHsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjID0gKHZlY3RvciBzaWduZWQgY2hhcikwOworICBfX3ZlY1s3XSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2luc2VydF9hbmRfemVybyhjb25zdCB1bnNpZ25lZCBjaGFyICpfX3B0cikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikwOworICBfX3ZlY1s3XSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KTA7CisgIF9fdmVjWzNdID0gKl9fcHRyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2luc2VydF9hbmRfemVybyhjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fdmVjID0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCkwOworICBfX3ZlY1szXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2luc2VydF9hbmRfemVybyhjb25zdCBzaWduZWQgaW50ICpfX3B0cikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYyA9ICh2ZWN0b3Igc2lnbmVkIGludCkwOworICBfX3ZlY1sxXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KTA7CisgIF9fdmVjWzFdID0gKl9fcHRyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfaW5zZXJ0X2FuZF96ZXJvKGNvbnN0IHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyKSB7CisgIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fdmVjID0gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKTA7CisgIF9fdmVjWzBdID0gKl9fcHRyOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19pbnNlcnRfYW5kX3plcm8oY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0cikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpMDsKKyAgX192ZWNbMF0gPSAqX19wdHI7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2luc2VydF9hbmRfemVybyhjb25zdCBkb3VibGUgKl9fcHRyKSB7CisgIHZlY3RvciBkb3VibGUgX192ZWMgPSAodmVjdG9yIGRvdWJsZSkwOworICBfX3ZlY1swXSA9ICpfX3B0cjsKKyAgcmV0dXJuIF9fdmVjOworfQorCisvKi0tIHZlY19wZXJtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3Blcm0odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wZXJtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19wZXJtKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19wZXJtKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3Blcm0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92cGVybSgKKyAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19wZXJtKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19wZXJtKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfcGVybSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcGVybSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZwZXJtKAorICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19wZXJtKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19wZXJtKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwKKyAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnBlcm0oCisgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX3Blcm1pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3Blcm1pKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3Blcm1pKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwgaW50IF9fYykKKyAgX19jb25zdGFudF9yYW5nZShfX2MsIDAsIDMpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3Blcm1pKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgZG91YmxlCit2ZWNfcGVybWkodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCBpbnQgX19jKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYywgMCwgMyk7CisKKyNkZWZpbmUgdmVjX3Blcm1pKFgsIFksIFopICgoX190eXBlb2ZfXygodmVjX3Blcm1pKSgoWCksIChZKSwgKFopKSkpIFwKKyAgX19idWlsdGluX3MzOTBfdnBkaSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoWCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoWSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChaKSAmIDIpIDw8IDEpIHwgKChaKSAmIDEpKSkKKworLyotLSB2ZWNfc2VsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBzaWduZWQgY2hhcilfX2MgJiBfX2IpIHwgKH4odmVjdG9yIHNpZ25lZCBjaGFyKV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgY2hhcilfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc2VsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYiwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBib29sIGNoYXIpX19jICYgX19iKSB8ICh+KHZlY3RvciBib29sIGNoYXIpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NlbCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIHZlY3RvciBib29sIGNoYXIgX19jKSB7CisgIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2VsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyIF9fYykgeworICByZXR1cm4gKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2MgJiBfX2IpIHwgKH4odmVjdG9yIHVuc2lnbmVkIGNoYXIpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NlbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIHNpZ25lZCBzaG9ydClfX2MgJiBfX2IpIHwgKH4odmVjdG9yIHNpZ25lZCBzaG9ydClfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc2VsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciBzaWduZWQgc2hvcnQpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgc2hvcnQpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zZWwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIGJvb2wgc2hvcnQpX19jICYgX19iKSB8ICh+KHZlY3RvciBib29sIHNob3J0KV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc2VsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIChfX2MgJiBfX2IpIHwgKH5fX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuICgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2MgJiBfX2IpIHwKKyAgICAgICAgICAofih2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19jICYgX19hKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2VsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKCh2ZWN0b3Igc2lnbmVkIGludClfX2MgJiBfX2IpIHwgKH4odmVjdG9yIHNpZ25lZCBpbnQpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIHZlY3RvciBib29sIGludCBfX2MpIHsKKyAgcmV0dXJuICgodmVjdG9yIHNpZ25lZCBpbnQpX19jICYgX19iKSB8ICh+KHZlY3RvciBzaWduZWQgaW50KV9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NlbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKCh2ZWN0b3IgYm9vbCBpbnQpX19jICYgX19iKSB8ICh+KHZlY3RvciBib29sIGludClfX2MgJiBfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zZWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgdmVjdG9yIGJvb2wgaW50IF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gKF9fYyAmIF9fYikgfCAofl9fYyAmIF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zZWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCB2ZWN0b3IgYm9vbCBpbnQgX19jKSB7CisgIHJldHVybiAoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19jICYgX19iKSB8ICh+KHZlY3RvciB1bnNpZ25lZCBpbnQpX19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2MgJiBfX2IpIHwKKyAgICAgICAgICAofih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2MgJiBfX2EpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuICgoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYyAmIF9fYikgfAorICAgICAgICAgICh+KHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYyAmIF9fYSkpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zZWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuICgoKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2MgJiBfX2IpIHwKKyAgICAgICAgICAofih2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19jICYgX19hKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NlbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iLAorICAgICAgICB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAoX19jICYgX19iKSB8ICh+X19jICYgX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NlbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuICgoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19jICYgX19iKSB8CisgICAgICAgICAgKH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2MgJiBfX2EpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3NlbCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKF9fYyAmICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICh+X19jICYgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zZWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19jKSB7CisgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hYyA9ICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYTsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fY2MgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2M7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKF9fY2MgJiBfX2JjKSB8ICh+X19jYyAmIF9fYWMpKTsKK30KKworLyotLSB2ZWNfZ2F0aGVyX2VsZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBpbnQgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7CisgIF9fdmVjW19faW5kZXhdID0gKihjb25zdCBzaWduZWQgaW50ICopKAorICAgIChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyAoX19JTlRQVFJfVFlQRV9fKV9fb2Zmc2V0W19faW5kZXhdKTsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19nYXRoZXJfZWxlbWVudCh2ZWN0b3IgYm9vbCBpbnQgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3QgdW5zaWduZWQgaW50ICopKAorICAgIChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyAoX19JTlRQVFJfVFlQRV9fKV9fb2Zmc2V0W19faW5kZXhdKTsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZ2F0aGVyX2VsZW1lbnQodmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGludCBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7CisgIF9fdmVjW19faW5kZXhdID0gKihjb25zdCB1bnNpZ25lZCBpbnQgKikoCisgICAgKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIChfX0lOVFBUUl9UWVBFX18pX19vZmZzZXRbX19pbmRleF0pOworICByZXR1cm4gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfZ2F0aGVyX2VsZW1lbnQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX192ZWMsCisgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgbG9uZyBsb25nICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3Qgc2lnbmVkIGxvbmcgbG9uZyAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfZ2F0aGVyX2VsZW1lbnQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fdmVjLAorICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICopKAorICAgIChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyAoX19JTlRQVFJfVFlQRV9fKV9fb2Zmc2V0W19faW5kZXhdKTsKKyAgcmV0dXJuIF9fdmVjOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfZ2F0aGVyX2VsZW1lbnQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgX192ZWNbX19pbmRleF0gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgKKyAgICAoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgKF9fSU5UUFRSX1RZUEVfXylfX29mZnNldFtfX2luZGV4XSk7CisgIHJldHVybiBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2dhdGhlcl9lbGVtZW50KHZlY3RvciBkb3VibGUgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICBfX3ZlY1tfX2luZGV4XSA9ICooY29uc3QgZG91YmxlICopKAorICAgIChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyAoX19JTlRQVFJfVFlQRV9fKV9fb2Zmc2V0W19faW5kZXhdKTsKKyAgcmV0dXJuIF9fdmVjOworfQorCisvKi0tIHZlY19zY2F0dGVyX2VsZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIHNpZ25lZCBpbnQgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHNpZ25lZCBpbnQgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7CisgICooc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KKyAgICBfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3IgYm9vbCBpbnQgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKKyAgKih1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9CisgICAgX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zY2F0dGVyX2VsZW1lbnQodmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgdmVjdG9yIHVuc2lnbmVkIGludCBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICAqKHVuc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KKyAgICBfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgKihzaWduZWQgbG9uZyBsb25nICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQorICAgIF9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX3ZlYywKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0ciwgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXRbX19pbmRleF0pID0KKyAgICBfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3NjYXR0ZXJfZWxlbWVudCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjLAorICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKl9fcHRyLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgICoodW5zaWduZWQgbG9uZyBsb25nICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldFtfX2luZGV4XSkgPQorICAgIF9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2b2lkCit2ZWNfc2NhdHRlcl9lbGVtZW50KHZlY3RvciBkb3VibGUgX192ZWMsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19wdHIsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgKihkb3VibGUgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0W19faW5kZXhdKSA9CisgICAgX192ZWNbX19pbmRleF07Cit9CisKKy8qLS0gdmVjX3hsZDIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgY2hhciAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCBzaWduZWQgaW50ICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCB1bnNpZ25lZCBpbnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IHNpZ25lZCBsb25nIGxvbmcgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgbG9uZyBsb25nICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY194bGQyKGxvbmcgX19vZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfeGxkMihsb25nIF9fb2Zmc2V0LCBjb25zdCBkb3VibGUgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciBkb3VibGUgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworLyotLSB2ZWNfeGx3NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY194bHc0KGxvbmcgX19vZmZzZXQsIGNvbnN0IHNpZ25lZCBjaGFyICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY194bHc0KGxvbmcgX19vZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY194bHc0KGxvbmcgX19vZmZzZXQsIGNvbnN0IHNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY194bHc0KGxvbmcgX19vZmZzZXQsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX3B0cikgeworICByZXR1cm4gKihjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY194bHc0KGxvbmcgX19vZmZzZXQsIGNvbnN0IHNpZ25lZCBpbnQgKl9fcHRyKSB7CisgIHJldHVybiAqKGNvbnN0IHZlY3RvciBzaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY194bHc0KGxvbmcgX19vZmZzZXQsIGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIpIHsKKyAgcmV0dXJuICooY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpOworfQorCisvKi0tIHZlY194c3RkMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMsIGxvbmcgX19vZmZzZXQsIHNpZ25lZCBjaGFyICpfX3B0cikgeworICAqKHZlY3RvciBzaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYywgbG9uZyBfX29mZnNldCwgdW5zaWduZWQgY2hhciAqX19wdHIpIHsKKyAgKih2ZWN0b3IgdW5zaWduZWQgY2hhciAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBzaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHVuc2lnbmVkIHNob3J0ICpfX3B0cikgeworICAqKHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgbG9uZyBfX29mZnNldCwgc2lnbmVkIGludCAqX19wdHIpIHsKKyAgKih2ZWN0b3Igc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHVuc2lnbmVkIGludCAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgbG9uZyBfX29mZnNldCwKKyAgICAgICAgICBzaWduZWQgbG9uZyBsb25nICpfX3B0cikgeworICAqKHZlY3RvciBzaWduZWQgbG9uZyBsb25nICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3hzdGQyKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX192ZWMsIGxvbmcgX19vZmZzZXQsCisgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0cikgeworICAqKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgKikoKF9fSU5UUFRSX1RZUEVfXylfX3B0ciArIF9fb2Zmc2V0KSA9CisgICAgX192ZWM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY194c3RkMih2ZWN0b3IgZG91YmxlIF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBkb3VibGUgKl9fcHRyKSB7CisgICoodmVjdG9yIGRvdWJsZSAqKSgoX19JTlRQVFJfVFlQRV9fKV9fcHRyICsgX19vZmZzZXQpID0gX192ZWM7Cit9CisKKy8qLS0gdmVjX3hzdHc0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3hzdHc0KHZlY3RvciBzaWduZWQgY2hhciBfX3ZlYywgbG9uZyBfX29mZnNldCwgc2lnbmVkIGNoYXIgKl9fcHRyKSB7CisgICoodmVjdG9yIHNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3hzdHc0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fdmVjLCBsb25nIF9fb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpfX3B0cikgeworICAqKHZlY3RvciB1bnNpZ25lZCBjaGFyICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3hzdHc0KHZlY3RvciBzaWduZWQgc2hvcnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHNpZ25lZCBzaG9ydCAqX19wdHIpIHsKKyAgKih2ZWN0b3Igc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3hzdHc0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYywgbG9uZyBfX29mZnNldCwgdW5zaWduZWQgc2hvcnQgKl9fcHRyKSB7CisgICoodmVjdG9yIHVuc2lnbmVkIHNob3J0ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3hzdHc0KHZlY3RvciBzaWduZWQgaW50IF9fdmVjLCBsb25nIF9fb2Zmc2V0LCBzaWduZWQgaW50ICpfX3B0cikgeworICAqKHZlY3RvciBzaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3hzdHc0KHZlY3RvciB1bnNpZ25lZCBpbnQgX192ZWMsIGxvbmcgX19vZmZzZXQsIHVuc2lnbmVkIGludCAqX19wdHIpIHsKKyAgKih2ZWN0b3IgdW5zaWduZWQgaW50ICopKChfX0lOVFBUUl9UWVBFX18pX19wdHIgKyBfX29mZnNldCkgPSBfX3ZlYzsKK30KKworLyotLSB2ZWNfbG9hZF9ibmRyeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2xvYWRfYm5kcnkoY29uc3Qgc2lnbmVkIGNoYXIgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKKyAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKKyAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2xvYWRfYm5kcnkoY29uc3Qgc2lnbmVkIHNob3J0ICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2xvYWRfYm5kcnkoY29uc3QgdW5zaWduZWQgc2hvcnQgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKKyAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHNpZ25lZCBpbnQgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKKyAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2xvYWRfYm5kcnkoY29uc3QgdW5zaWduZWQgaW50ICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbG9hZF9ibmRyeShjb25zdCBzaWduZWQgbG9uZyBsb25nICpfX3B0ciwgdW5zaWduZWQgc2hvcnQgX19sZW4pCisgIF9fY29uc3RhbnRfcG93Ml9yYW5nZShfX2xlbiwgNjQsIDQwOTYpOworCitleHRlcm4gX19BVFRSU19vIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19sb2FkX2JuZHJ5KGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIHVuc2lnbmVkIHNob3J0IF9fbGVuKQorICBfX2NvbnN0YW50X3BvdzJfcmFuZ2UoX19sZW4sIDY0LCA0MDk2KTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgZG91YmxlCit2ZWNfbG9hZF9ibmRyeShjb25zdCBkb3VibGUgKl9fcHRyLCB1bnNpZ25lZCBzaG9ydCBfX2xlbikKKyAgX19jb25zdGFudF9wb3cyX3JhbmdlKF9fbGVuLCA2NCwgNDA5Nik7CisKKyNkZWZpbmUgdmVjX2xvYWRfYm5kcnkoWCwgWSkgKChfX3R5cGVvZl9fKCh2ZWNfbG9hZF9ibmRyeSkoKFgpLCAoWSkpKSkgXAorICBfX2J1aWx0aW5fczM5MF92bGJiKChYKSwgKChZKSA9PSA2NCA/IDAgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDEyOCA/IDEgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDI1NiA/IDIgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDUxMiA/IDMgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFkpID09IDEwMjQgPyA0IDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChZKSA9PSAyMDQ4ID8gNSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWSkgPT0gNDA5NiA/IDYgOiAtMSkpKQorCisvKi0tIHZlY19sb2FkX2xlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2xvYWRfbGVuKGNvbnN0IHNpZ25lZCBjaGFyICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2xvYWRfbGVuKGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2xvYWRfbGVuKGNvbnN0IHNpZ25lZCBzaG9ydCAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2xvYWRfbGVuKGNvbnN0IHVuc2lnbmVkIHNob3J0ICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2xvYWRfbGVuKGNvbnN0IHNpZ25lZCBpbnQgKl9fcHRyLCB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2xvYWRfbGVuKGNvbnN0IHVuc2lnbmVkIGludCAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbG9hZF9sZW4oY29uc3Qgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZsbChfX2xlbiwgX19wdHIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbG9hZF9sZW4oY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0ciwgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92bGwoX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2xvYWRfbGVuKGNvbnN0IGRvdWJsZSAqX19wdHIsIHVuc2lnbmVkIGludCBfX2xlbikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdmxsKF9fbGVuLCBfX3B0cik7Cit9CisKKy8qLS0gdmVjX3N0b3JlX2xlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3N0b3JlX2xlbih2ZWN0b3Igc2lnbmVkIGNoYXIgX192ZWMsIHNpZ25lZCBjaGFyICpfX3B0ciwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3N0b3JlX2xlbih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ZlYywgdW5zaWduZWQgY2hhciAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHNpZ25lZCBzaG9ydCBfX3ZlYywgc2lnbmVkIHNob3J0ICpfX3B0ciwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3N0b3JlX2xlbih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX192ZWMsIHVuc2lnbmVkIHNob3J0ICpfX3B0ciwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3N0b3JlX2xlbih2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgc2lnbmVkIGludCAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHVuc2lnbmVkIGludCBfX3ZlYywgdW5zaWduZWQgaW50ICpfX3B0ciwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3N0b3JlX2xlbih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgc2lnbmVkIGxvbmcgbG9uZyAqX19wdHIsCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xlbikgeworICBfX2J1aWx0aW5fczM5MF92c3RsKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX192ZWMsIF9fbGVuLCBfX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZvaWQKK3ZlY19zdG9yZV9sZW4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgdW5zaWduZWQgbG9uZyBsb25nICpfX3B0ciwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGVuKSB7CisgIF9fYnVpbHRpbl9zMzkwX3ZzdGwoKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlYywgX19sZW4sIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdm9pZAordmVjX3N0b3JlX2xlbih2ZWN0b3IgZG91YmxlIF9fdmVjLCBkb3VibGUgKl9fcHRyLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19sZW4pIHsKKyAgX19idWlsdGluX3MzOTBfdnN0bCgodmVjdG9yIHNpZ25lZCBjaGFyKV9fdmVjLCBfX2xlbiwgX19wdHIpOworfQorCisvKi0tIHZlY19sb2FkX3BhaXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbG9hZF9wYWlyKHNpZ25lZCBsb25nIGxvbmcgX19hLCBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19sb2FkX3BhaXIodW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfZ2VubWFzayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2dlbm1hc2sodW5zaWduZWQgc2hvcnQgX19tYXNrKQorICBfX2NvbnN0YW50KF9fbWFzaykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgKKyAgICBfX21hc2sgJiAweDgwMDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDQwMDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDIwMDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDEwMDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDA4MDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDA0MDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAyMDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAxMDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAwODAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAwNDAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAwMjAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAwMTAgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAwMDggPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAwMDQgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAwMDIgPyAweGZmIDogMCwKKyAgICBfX21hc2sgJiAweDAwMDEgPyAweGZmIDogMCk7Cit9CisKKy8qLS0gdmVjX2dlbm1hc2tzXyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19nZW5tYXNrc184KHVuc2lnbmVkIGNoYXIgX19maXJzdCwgdW5zaWduZWQgY2hhciBfX2xhc3QpCisgIF9fY29uc3RhbnQoX19maXJzdCkgX19jb25zdGFudChfX2xhc3QpIHsKKyAgdW5zaWduZWQgY2hhciBfX2JpdDEgPSBfX2ZpcnN0ICYgNzsKKyAgdW5zaWduZWQgY2hhciBfX2JpdDIgPSBfX2xhc3QgJiA3OworICB1bnNpZ25lZCBjaGFyIF9fbWFzazEgPSAodW5zaWduZWQgY2hhcikoMVUgPDwgKDcgLSBfX2JpdDEpIDw8IDEpIC0gMTsKKyAgdW5zaWduZWQgY2hhciBfX21hc2syID0gKHVuc2lnbmVkIGNoYXIpKDFVIDw8ICg3IC0gX19iaXQyKSkgLSAxOworICB1bnNpZ25lZCBjaGFyIF9fdmFsdWUgPSAoX19iaXQxIDw9IF9fYml0MiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxICYgfl9fbWFzazIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSB8IH5fX21hc2syKTsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3ZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19nZW5tYXNrc18xNih1bnNpZ25lZCBjaGFyIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIgX19sYXN0KQorICBfX2NvbnN0YW50KF9fZmlyc3QpIF9fY29uc3RhbnQoX19sYXN0KSB7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQxID0gX19maXJzdCAmIDE1OworICB1bnNpZ25lZCBjaGFyIF9fYml0MiA9IF9fbGFzdCAmIDE1OworICB1bnNpZ25lZCBzaG9ydCBfX21hc2sxID0gKHVuc2lnbmVkIHNob3J0KSgxVSA8PCAoMTUgLSBfX2JpdDEpIDw8IDEpIC0gMTsKKyAgdW5zaWduZWQgc2hvcnQgX19tYXNrMiA9ICh1bnNpZ25lZCBzaG9ydCkoMVUgPDwgKDE1IC0gX19iaXQyKSkgLSAxOworICB1bnNpZ25lZCBzaG9ydCBfX3ZhbHVlID0gKF9fYml0MSA8PSBfX2JpdDIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWFzazEgJiB+X19tYXNrMiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSB8IH5fX21hc2syKTsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX192YWx1ZTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2dlbm1hc2tzXzMyKHVuc2lnbmVkIGNoYXIgX19maXJzdCwgdW5zaWduZWQgY2hhciBfX2xhc3QpCisgIF9fY29uc3RhbnQoX19maXJzdCkgX19jb25zdGFudChfX2xhc3QpIHsKKyAgdW5zaWduZWQgY2hhciBfX2JpdDEgPSBfX2ZpcnN0ICYgMzE7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQyID0gX19sYXN0ICYgMzE7CisgIHVuc2lnbmVkIGludCBfX21hc2sxID0gKDFVIDw8ICgzMSAtIF9fYml0MSkgPDwgMSkgLSAxOworICB1bnNpZ25lZCBpbnQgX19tYXNrMiA9ICgxVSA8PCAoMzEgLSBfX2JpdDIpKSAtIDE7CisgIHVuc2lnbmVkIGludCBfX3ZhbHVlID0gKF9fYml0MSA8PSBfX2JpdDIgPworICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxICYgfl9fbWFzazIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hc2sxIHwgfl9fbWFzazIpOworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX192YWx1ZTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2dlbm1hc2tzXzY0KHVuc2lnbmVkIGNoYXIgX19maXJzdCwgdW5zaWduZWQgY2hhciBfX2xhc3QpCisgIF9fY29uc3RhbnQoX19maXJzdCkgX19jb25zdGFudChfX2xhc3QpIHsKKyAgdW5zaWduZWQgY2hhciBfX2JpdDEgPSBfX2ZpcnN0ICYgNjM7CisgIHVuc2lnbmVkIGNoYXIgX19iaXQyID0gX19sYXN0ICYgNjM7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX21hc2sxID0gKDFVTEwgPDwgKDYzIC0gX19iaXQxKSA8PCAxKSAtIDE7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX21hc2syID0gKDFVTEwgPDwgKDYzIC0gX19iaXQyKSkgLSAxOworICB1bnNpZ25lZCBsb25nIGxvbmcgX192YWx1ZSA9IChfX2JpdDEgPD0gX19iaXQyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSAmIH5fX21hc2syIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXNrMSB8IH5fX21hc2syKTsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fdmFsdWU7Cit9CisKKy8qLS0gdmVjX3NwbGF0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3BsYXQodmVjdG9yIHNpZ25lZCBjaGFyIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxNSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NwbGF0KHZlY3RvciBib29sIGNoYXIgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDE1KSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikodmVjdG9yIHVuc2lnbmVkIGNoYXIpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3BsYXQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDE1KSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCA3KSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zcGxhdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgNykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NwbGF0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgNykgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIGludCBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zcGxhdCh2ZWN0b3IgYm9vbCBpbnQgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDMpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKHZlY3RvciB1bnNpZ25lZCBpbnQpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAzKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcGxhdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX3ZlYywgaW50IF9faW5kZXgpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19pbmRleCwgMCwgMSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fdmVjW19faW5kZXhdOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zcGxhdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX192ZWNbX19pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcGxhdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fdmVjLCBpbnQgX19pbmRleCkKKyAgX19jb25zdGFudF9yYW5nZShfX2luZGV4LCAwLCAxKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3ZlY1tfX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3NwbGF0KHZlY3RvciBkb3VibGUgX192ZWMsIGludCBfX2luZGV4KQorICBfX2NvbnN0YW50X3JhbmdlKF9faW5kZXgsIDAsIDEpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fdmVjW19faW5kZXhdOworfQorCisvKi0tIHZlY19zcGxhdF9zKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcGxhdF9zOChzaWduZWQgY2hhciBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcGxhdF9zMTYoc2lnbmVkIHNob3J0IF9fc2NhbGFyKQorICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3BsYXRfczMyKHNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KShzaWduZWQgaW50KV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcGxhdF9zNjQoc2lnbmVkIHNob3J0IF9fc2NhbGFyKQorICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKHNpZ25lZCBsb25nKV9fc2NhbGFyOworfQorCisvKi0tIHZlY19zcGxhdF91KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NwbGF0X3U4KHVuc2lnbmVkIGNoYXIgX19zY2FsYXIpCisgIF9fY29uc3RhbnQoX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NwbGF0X3UxNih1bnNpZ25lZCBzaG9ydCBfX3NjYWxhcikKKyAgX19jb25zdGFudChfX3NjYWxhcikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcGxhdF91MzIoc2lnbmVkIHNob3J0IF9fc2NhbGFyKQorICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCkoc2lnbmVkIGludClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcGxhdF91NjQoc2lnbmVkIHNob3J0IF9fc2NhbGFyKQorICBfX2NvbnN0YW50KF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoc2lnbmVkIGxvbmcgbG9uZylfX3NjYWxhcjsKK30KKworLyotLSB2ZWNfc3BsYXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcGxhdHMoc2lnbmVkIGNoYXIgX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3BsYXRzKHVuc2lnbmVkIGNoYXIgX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NwbGF0cyhzaWduZWQgc2hvcnQgX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcGxhdHModW5zaWduZWQgc2hvcnQgX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3BsYXRzKHNpZ25lZCBpbnQgX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NwbGF0cyh1bnNpZ25lZCBpbnQgX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fc2NhbGFyOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NwbGF0cyhzaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19zY2FsYXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcGxhdHModW5zaWduZWQgbG9uZyBsb25nIF9fc2NhbGFyKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3NjYWxhcjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3NwbGF0cyhkb3VibGUgX19zY2FsYXIpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fc2NhbGFyOworfQorCisvKi0tIHZlY19leHRlbmRfczY0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfZXh0ZW5kX3M2NCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYVs3XSwgX19hWzE1XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfZXh0ZW5kX3M2NCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKShfX2FbM10sIF9fYVs3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfZXh0ZW5kX3M2NCh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykoX19hWzFdLCBfX2FbM10pOworfQorCisvKi0tIHZlY19tZXJnZWggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21lcmdlaCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKSgKKyAgICBfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0sIF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSwKKyAgICBfX2FbNF0sIF9fYls0XSwgX19hWzVdLCBfX2JbNV0sIF9fYVs2XSwgX19iWzZdLCBfX2FbN10sIF9fYls3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19tZXJnZWgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10sCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgKKyAgICBfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0sIF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSwKKyAgICBfX2FbNF0sIF9fYls0XSwgX19hWzVdLCBfX2JbNV0sIF9fYVs2XSwgX19iWzZdLCBfX2FbN10sIF9fYls3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tZXJnZWgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkoCisgICAgX19hWzBdLCBfX2JbMF0sIF9fYVsxXSwgX19iWzFdLCBfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KSgKKyAgICBfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0sIF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgKKyAgICBfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0sIF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpKF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX21lcmdlaCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2FbMF0sIF9fYlswXSwgX19hWzFdLCBfX2JbMV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWVyZ2VoKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpKF9fYVswXSwgX19iWzBdLCBfX2FbMV0sIF9fYlsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbWVyZ2VoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYVswXSwgX19iWzBdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfbWVyZ2VoKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYVswXSwgX19iWzBdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21lcmdlaCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2FbMF0sIF9fYlswXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19tZXJnZWgodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoX19hWzBdLCBfX2JbMF0pOworfQorCisvKi0tIHZlY19tZXJnZWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21lcmdlbCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKSgKKyAgICBfX2FbOF0sIF9fYls4XSwgX19hWzldLCBfX2JbOV0sIF9fYVsxMF0sIF9fYlsxMF0sIF9fYVsxMV0sIF9fYlsxMV0sCisgICAgX19hWzEyXSwgX19iWzEyXSwgX19hWzEzXSwgX19iWzEzXSwgX19hWzE0XSwgX19iWzE0XSwgX19hWzE1XSwgX19iWzE1XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19tZXJnZWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoCisgICAgX19hWzhdLCBfX2JbOF0sIF9fYVs5XSwgX19iWzldLCBfX2FbMTBdLCBfX2JbMTBdLCBfX2FbMTFdLCBfX2JbMTFdLAorICAgIF9fYVsxMl0sIF9fYlsxMl0sIF9fYVsxM10sIF9fYlsxM10sIF9fYVsxNF0sIF9fYlsxNF0sIF9fYVsxNV0sIF9fYlsxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgKKyAgICBfX2FbOF0sIF9fYls4XSwgX19hWzldLCBfX2JbOV0sIF9fYVsxMF0sIF9fYlsxMF0sIF9fYVsxMV0sIF9fYlsxMV0sCisgICAgX19hWzEyXSwgX19iWzEyXSwgX19hWzEzXSwgX19iWzEzXSwgX19hWzE0XSwgX19iWzE0XSwgX19hWzE1XSwgX19iWzE1XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tZXJnZWwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkoCisgICAgX19hWzRdLCBfX2JbNF0sIF9fYVs1XSwgX19iWzVdLCBfX2FbNl0sIF9fYls2XSwgX19hWzddLCBfX2JbN10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KSgKKyAgICBfX2FbNF0sIF9fYls0XSwgX19hWzVdLCBfX2JbNV0sIF9fYVs2XSwgX19iWzZdLCBfX2FbN10sIF9fYls3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KSgKKyAgICBfX2FbNF0sIF9fYls0XSwgX19hWzVdLCBfX2JbNV0sIF9fYVs2XSwgX19iWzZdLCBfX2FbN10sIF9fYls3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWVyZ2VsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpKF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX21lcmdlbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2FbMl0sIF9fYlsyXSwgX19hWzNdLCBfX2JbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWVyZ2VsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpKF9fYVsyXSwgX19iWzJdLCBfX2FbM10sIF9fYlszXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbWVyZ2VsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpKF9fYVsxXSwgX19iWzFdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfbWVyZ2VsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYVsxXSwgX19iWzFdKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21lcmdlbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKShfX2FbMV0sIF9fYlsxXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19tZXJnZWwodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoX19hWzFdLCBfX2JbMV0pOworfQorCisvKi0tIHZlY19wYWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3BhY2sodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHZlY3RvciBzaWduZWQgY2hhciBfX2FjID0gKHZlY3RvciBzaWduZWQgY2hhcilfX2E7CisgIHZlY3RvciBzaWduZWQgY2hhciBfX2JjID0gKHZlY3RvciBzaWduZWQgY2hhcilfX2I7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKSgKKyAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLCBfX2FjWzldLCBfX2FjWzExXSwgX19hY1sxM10sIF9fYWNbMTVdLAorICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10sIF9fYmNbOV0sIF9fYmNbMTFdLCBfX2JjWzEzXSwgX19iY1sxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfcGFjayh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICB2ZWN0b3IgYm9vbCBjaGFyIF9fYWMgPSAodmVjdG9yIGJvb2wgY2hhcilfX2E7CisgIHZlY3RvciBib29sIGNoYXIgX19iYyA9ICh2ZWN0b3IgYm9vbCBjaGFyKV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKSgKKyAgICBfX2FjWzFdLCBfX2FjWzNdLCBfX2FjWzVdLCBfX2FjWzddLCBfX2FjWzldLCBfX2FjWzExXSwgX19hY1sxM10sIF9fYWNbMTVdLAorICAgIF9fYmNbMV0sIF9fYmNbM10sIF9fYmNbNV0sIF9fYmNbN10sIF9fYmNbOV0sIF9fYmNbMTFdLCBfX2JjWzEzXSwgX19iY1sxNV0pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3BhY2sodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYTsKKyAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2I7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKAorICAgIF9fYWNbMV0sIF9fYWNbM10sIF9fYWNbNV0sIF9fYWNbN10sIF9fYWNbOV0sIF9fYWNbMTFdLCBfX2FjWzEzXSwgX19hY1sxNV0sCisgICAgX19iY1sxXSwgX19iY1szXSwgX19iY1s1XSwgX19iY1s3XSwgX19iY1s5XSwgX19iY1sxMV0sIF9fYmNbMTNdLCBfX2JjWzE1XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19wYWNrKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciBzaWduZWQgc2hvcnQgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYTsKKyAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2JjID0gKHZlY3RvciBzaWduZWQgc2hvcnQpX19iOworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpKAorICAgIF9fYWNbMV0sIF9fYWNbM10sIF9fYWNbNV0sIF9fYWNbN10sCisgICAgX19iY1sxXSwgX19iY1szXSwgX19iY1s1XSwgX19iY1s3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfcGFjayh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciBib29sIHNob3J0IF9fYWMgPSAodmVjdG9yIGJvb2wgc2hvcnQpX19hOworICB2ZWN0b3IgYm9vbCBzaG9ydCBfX2JjID0gKHZlY3RvciBib29sIHNob3J0KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoCisgICAgX19hY1sxXSwgX19hY1szXSwgX19hY1s1XSwgX19hY1s3XSwKKyAgICBfX2JjWzFdLCBfX2JjWzNdLCBfX2JjWzVdLCBfX2JjWzddKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcGFjayh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYTsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKAorICAgIF9fYWNbMV0sIF9fYWNbM10sIF9fYWNbNV0sIF9fYWNbN10sCisgICAgX19iY1sxXSwgX19iY1szXSwgX19iY1s1XSwgX19iY1s3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcGFjayh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGludCBfX2FjID0gKHZlY3RvciBzaWduZWQgaW50KV9fYTsKKyAgdmVjdG9yIHNpZ25lZCBpbnQgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpKF9fYWNbMV0sIF9fYWNbM10sIF9fYmNbMV0sIF9fYmNbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19wYWNrKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIGJvb2wgaW50IF9fYWMgPSAodmVjdG9yIGJvb2wgaW50KV9fYTsKKyAgdmVjdG9yIGJvb2wgaW50IF9fYmMgPSAodmVjdG9yIGJvb2wgaW50KV9fYjsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYWNbMV0sIF9fYWNbM10sIF9fYmNbMV0sIF9fYmNbM10pOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcGFjayh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hOworICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGludClfX2I7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludCkoX19hY1sxXSwgX19hY1szXSwgX19iY1sxXSwgX19iY1szXSk7Cit9CisKKy8qLS0gdmVjX3BhY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfcGFja3ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtzaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfcGFja3ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3BhY2tzKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtzZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3BhY2tzKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNmKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19wYWNrcyh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrc2coX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcGFja3ModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2coX19hLCBfX2IpOworfQorCisvKi0tIHZlY19wYWNrc19jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3BhY2tzX2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtzaHMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3BhY2tzX2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNocyhfX2EsIF9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19wYWNrc19jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtzZnMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wYWNrc19jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNmcyhfX2EsIF9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcGFja3NfY2ModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsCisgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtzZ3MoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcGFja3NfY2ModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNncyhfX2EsIF9fYiwgX19jYyk7Cit9CisKKy8qLS0gdmVjX3BhY2tzdSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19wYWNrc3UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgX196ZXJvID0gKHZlY3RvciBzaWduZWQgc2hvcnQpMDsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzaCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KShfX2EgPj0gX196ZXJvKSAmICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpKF9fYiA+PSBfX3plcm8pICYgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wYWNrc3UodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgX196ZXJvID0gKHZlY3RvciBzaWduZWQgaW50KTA7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2YoCisgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpKF9fYSA+PSBfX3plcm8pICYgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KShfX2IgPj0gX196ZXJvKSAmICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3BhY2tzdSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19wYWNrc3UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgY29uc3QgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX196ZXJvID0gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKTA7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2coCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKF9fYSA+PSBfX3plcm8pICYKKyAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKF9fYiA+PSBfX3plcm8pICYKKyAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcGFja3N1KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBrbHNnKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfcGFja3N1X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3BhY2tzdV9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzaHMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19wYWNrc3VfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwa2xzZnMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcGFja3N1X2NjKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cGtsc2dzKF9fYSwgX19iLCBfX2NjKTsKK30KKworLyotLSB2ZWNfdW5wYWNraCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfdW5wYWNraCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBoYihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3VucGFja2godmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92dXBoYigodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3VucGFja2godmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsaGIoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY191bnBhY2toKHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBoaChfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY191bnBhY2toKHZlY3RvciBib29sIHNob3J0IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92dXBoaCgodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfdW5wYWNraCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsaGgoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY191bnBhY2toKHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwaGYoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfdW5wYWNraCh2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3Z1cGhmKCh2ZWN0b3Igc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfdW5wYWNraCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGhmKF9fYSk7Cit9CisKKy8qLS0gdmVjX3VucGFja2wgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3VucGFja2wodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGIoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY191bnBhY2tsKHZlY3RvciBib29sIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnVwbGIoKHZlY3RvciBzaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY191bnBhY2tsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGxiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfdW5wYWNrbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGh3KF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3VucGFja2wodmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3Z1cGxodygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfdW5wYWNrbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dXBsbGgoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY191bnBhY2tsKHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGYoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfdW5wYWNrbCh2ZWN0b3IgYm9vbCBpbnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3Z1cGxmKCh2ZWN0b3Igc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfdW5wYWNrbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnVwbGxmKF9fYSk7Cit9CisKKy8qLS0gdmVjX2NtcGVxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGVxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA9PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA9PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBlcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBlcSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGVxKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID09IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGVxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPT0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wZXEodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPT0gX19iKTsKK30KKworLyotLSB2ZWNfY21wZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wZ2UodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPj0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID49IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPj0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wZ2UodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBnZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA+PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBnZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID49IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGdlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID49IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGdlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID49IF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcGd0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcGd0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPiBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKShfX2EgPiBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGd0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPiBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wZ3QodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpKF9fYSA+IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA+IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGd0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hID4gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPiBfX2IpOworfQorCisvKi0tIHZlY19jbXBsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBsZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBsZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA8PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcGxlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPD0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19jbXBsZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA8PSBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBsZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NtcGxlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hIDw9IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2NtcGxlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPD0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPD0gX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wbGUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPD0gX19iKTsKK30KKworLyotLSB2ZWNfY21wbHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19jbXBsdCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpKF9fYSA8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wbHQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpKF9fYSA8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBsdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkoX19hIDwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBsdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZykoX19hIDwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfY21wbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKShfX2EgPCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19jbXBsdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpKF9fYSA8IF9fYik7Cit9CisKKy8qLS0gdmVjX2FsbF9lcSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2VxKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZXEodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9lcSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2VkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworLyotLSB2ZWNfYWxsX25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbmUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9uZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX25lKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjZWRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCisvKi0tIHZlY19hbGxfZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2IsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsICh2ZWN0b3Igc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9nZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19iLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2dlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworLyotLSB2ZWNfYWxsX2d0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfZ3QodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9ndCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworLyotLSB2ZWNfYWxsX2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYSwgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2EsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYSwgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbGUodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2xlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDM7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9sdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgKHZlY3RvciBzaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgKHZlY3RvciBzaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYWxsX2x0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FsbF9sdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbGxfbHQodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9uZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FsbF9uZ2UodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCisvKi0tIHZlY19hbGxfbmd0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbGxfbmd0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA9PSAzOworfQorCisvKi0tIHZlY19hbGxfbmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbGxfbmxlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYWxsX25sdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYWxsX25sdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYWxsX25hbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYWxsX25hbih2ZWN0b3IgZG91YmxlIF9fYSkgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZ0Y2lkYihfX2EsIDE1LCAmX19jYyk7CisgIHJldHVybiBfX2NjID09IDA7Cit9CisKKy8qLS0gdmVjX2FsbF9udW1lcmljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FsbF9udW1lcmljKHZlY3RvciBkb3VibGUgX19hKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZnRjaWRiKF9fYSwgMTUsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPT0gMzsKK30KKworLyotLSB2ZWNfYW55X2VxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcyhfX2EsICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGludClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZXEodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9lcSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2VxKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjZWRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCisvKi0tIHZlY19hbnlfbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoX19hLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWJzKCh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocyhfX2EsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxaHMoKHZlY3RvciBzaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgc2hvcnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWZzKCh2ZWN0b3Igc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9uZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncyhfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNlcWdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2VxZ3MoKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X25lKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjZXFncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbmUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNlZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKKy8qLS0gdmVjX2FueV9nZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoKHZlY3RvciBzaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYiwgKHZlY3RvciBzaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocygodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19iLCAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoKHZlY3RvciBzaWduZWQgaW50KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYiwgKHZlY3RvciBzaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoX19iLCAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncygodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2dlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19iLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9nZSh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ2UodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCisvKi0tIHZlY19hbnlfZ3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9ndCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfZ3QodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2d0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCisvKi0tIHZlY19hbnlfbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGJzKF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcilfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGZzKF9fYSwgKHZlY3RvciBzaWduZWQgaW50KV9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZ3MoX19hLCAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sZSh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYiwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbGUodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoX19hLCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCBfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxncygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2xlKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGVkYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworLyotLSB2ZWNfYW55X2x0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hicygodmVjdG9yIHNpZ25lZCBjaGFyKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoYnMoX19iLCAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGJzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoaHMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGhzKCh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hocyhfX2IsICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxocyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hmcygodmVjdG9yIHNpZ25lZCBpbnQpX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNoZnMoX19iLCAodmVjdG9yIHNpZ25lZCBpbnQpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGxmcyhfX2IsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZjaGdzKCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyA8PSAxOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY19hbnlfbHQodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hncyhfX2IsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfYW55X2x0KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYiwgX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmNobGdzKF9fYiwgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92Y2hsZ3MoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAmX19jYyk7CisgIHJldHVybiBfX2NjIDw9IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX2FueV9sdCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hkYnMoX19iLCBfX2EsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgPD0gMTsKK30KKworLyotLSB2ZWNfYW55X25nZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYW55X25nZSh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmY2hlZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKKy8qLS0gdmVjX2FueV9uZ3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FueV9uZ3QodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZGJzKF9fYSwgX19iLCAmX19jYyk7CisgIHJldHVybiBfX2NjICE9IDA7Cit9CisKKy8qLS0gdmVjX2FueV9ubGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIGludAordmVjX2FueV9ubGUodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZmNoZWRicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbnlfbmx0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbnlfbmx0KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICBpbnQgX19jYzsKKyAgX19idWlsdGluX3MzOTBfdmZjaGRicyhfX2IsIF9fYSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbnlfbmFuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSBpbnQKK3ZlY19hbnlfbmFuKHZlY3RvciBkb3VibGUgX19hKSB7CisgIGludCBfX2NjOworICBfX2J1aWx0aW5fczM5MF92ZnRjaWRiKF9fYSwgMTUsICZfX2NjKTsKKyAgcmV0dXJuIF9fY2MgIT0gMzsKK30KKworLyotLSB2ZWNfYW55X251bWVyaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgaW50Cit2ZWNfYW55X251bWVyaWModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgaW50IF9fY2M7CisgIF9fYnVpbHRpbl9zMzkwX3ZmdGNpZGIoX19hLCAxNSwgJl9fY2MpOworICByZXR1cm4gX19jYyAhPSAwOworfQorCisvKi0tIHZlY19hbmRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19hbmRjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19hbmRjKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19hbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19hbmRjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19hbmRjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfYW5kYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19hbmRjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfYW5kYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2FuZGModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX2FuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19hbmRjKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2FuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX2FuZGModmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19hbmRjKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfYW5kYyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2FuZGModmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBkb3VibGUgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSkoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hICYKKyAgICAgICAgICAgICAgICAgICAgICAgICB+KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX2FuZGModmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKSgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgJgorICAgICAgICAgICAgICAgICAgICAgICAgIH4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfYW5kYyh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgfih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKKy8qLS0gdmVjX25vciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX25vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbm9yKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbm9yKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX25vcih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19ub3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX25vcih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX25vcih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19ub3IodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX25vcih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfbm9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19ub3IodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbm9yKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19ub3IodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19ub3IodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gfihfX2EgfCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbm9yKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiB+KF9fYSB8IF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19ub3IodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIH4oX19hIHwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX25vcih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKX4oKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX25vcih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpfigodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbm9yKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSl+KCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYik7Cit9CisKKy8qLS0gdmVjX2NudGx6IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NudGx6KHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpoKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbnRseih2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjbHpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbnRseih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemYoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2NudGx6KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmNsemcoKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2NudGx6KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2x6ZyhfX2EpOworfQorCisvKi0tIHZlY19jbnR0eiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY250dHoodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY250dHoodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6YihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbnR0eih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbnR0eih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6aChfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY250dHoodmVjdG9yIHNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y3R6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY250dHoodmVjdG9yIHVuc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpmKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19jbnR0eih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZjdHpnKCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19jbnR0eih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmN0emcoX19hKTsKK30KKworLyotLSB2ZWNfcG9wY250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3BvcGNudCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3BvcGNudCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGIoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcG9wY250KHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcG9wY250KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGgoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BvcGNudCh2ZWN0b3Igc2lnbmVkIGludCBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zwb3BjdGYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3BvcGNudCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0ZihfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcG9wY250KHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnBvcGN0ZygodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfcG9wY250KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92cG9wY3RnKF9fYSk7Cit9CisKKy8qLS0gdmVjX3JsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfcmwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZlcmxsdmIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19ybCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGx2YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19ybCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdmVybGx2aCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmVybGx2aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcmwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZlcmxsdmYoCisgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbHZmKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19ybCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdmVybGx2ZygKKyAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19ybCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZlcmxsdmcoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19ybGkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3JsaSh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB1bnNpZ25lZCBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92ZXJsbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3JsaSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbGIoX19hLCAoaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19ybGkodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92ZXJsbGgoCisgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIChpbnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcmxpKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbGgoX19hLCAoaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfcmxpKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92ZXJsbGYoCisgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLCAoaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19ybGkodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbGYoX19hLCAoaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfcmxpKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdW5zaWduZWQgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92ZXJsbGcoCisgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19hLCAoaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19ybGkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHVuc2lnbmVkIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZXJsbGcoX19hLCAoaW50KV9fYik7Cit9CisKKy8qLS0gdmVjX3JsX21hc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19ybF9tYXNrKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19ybF9tYXNrKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIF9fY29uc3RhbnQoX19jKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfcmxfbWFzayh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfcmxfbWFzayh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIF9fY29uc3RhbnQoX19jKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGludAordmVjX3JsX21hc2sodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3JsX21hc2sodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIF9fY29uc3RhbnQoX19jKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3JsX21hc2sodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19jKSBfX2NvbnN0YW50KF9fYyk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3JsX21hc2sodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iLAorICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX2MpIF9fY29uc3RhbnQoX19jKTsKKworI2RlZmluZSB2ZWNfcmxfbWFzayhYLCBZLCBaKSAoKF9fdHlwZW9mX18oKHZlY19ybF9tYXNrKSgoWCksIChZKSwgKFopKSkpIFwKKyAgX19leHRlbnNpb25fXyAoeyBcCisgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19yZXM7IFwKKyAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX3ggPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKFgpOyBcCisgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX195ID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKShZKTsgXAorICAgIHN3aXRjaCAoc2l6ZW9mICgoWClbMF0pKSB7IFwKKyAgICBjYXNlIDE6IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSBfX2J1aWx0aW5fczM5MF92ZXJpbWIoIFwKKyAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX194LCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX194LCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9feSwgKFopKTsgYnJlYWs7IFwKKyAgICBjYXNlIDI6IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSBfX2J1aWx0aW5fczM5MF92ZXJpbWgoIFwKKyAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9feCwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX3gsIFwKKyAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9feSwgKFopKTsgYnJlYWs7IFwKKyAgICBjYXNlIDQ6IF9fcmVzID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKSBfX2J1aWx0aW5fczM5MF92ZXJpbWYoIFwKKyAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX3gsICh2ZWN0b3IgdW5zaWduZWQgaW50KV9feCwgXAorICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9feSwgKFopKTsgYnJlYWs7IFwKKyAgICBkZWZhdWx0OiBfX3JlcyA9ICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgX19idWlsdGluX3MzOTBfdmVyaW1nKCBcCisgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX194LCAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3gsIFwKKyAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX3ksIChaKSk7IGJyZWFrOyBcCisgICAgfSBfX3JlczsgfSkpCisKKy8qLS0gdmVjX3NsbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc2xsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc2xsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zbGwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2woX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzbChfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2woX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc2xsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NsbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc2xsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc2xsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zbGwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NsbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NsbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2woCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfc2xiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zbGIodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2xiKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2xiKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NsYih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zbGIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NsYih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zbGIodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NsYih2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc2xiKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zbGIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsYih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc2xiKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc2xiKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfc2xiKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZzbGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zbGIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92c2xiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKi0tIHZlY19zbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc2xkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zbGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NsZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc2xkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zbGQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zbGQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsZCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKK2V4dGVybiBfX0FUVFJTX28gdmVjdG9yIGRvdWJsZQordmVjX3NsZCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAxNSk7CisKKyNkZWZpbmUgdmVjX3NsZChYLCBZLCBaKSAoKF9fdHlwZW9mX18oKHZlY19zbGQpKChYKSwgKFkpLCAoWikpKSkgXAorICBfX2J1aWx0aW5fczM5MF92c2xkYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcikoWSksIChaKSkpCisKKy8qLS0gdmVjX3NsZHcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zbGR3KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NsZHcodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc2xkdyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zbGR3KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NsZHcodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc2xkdyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NsZHcodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc2xkdyh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworZXh0ZXJuIF9fQVRUUlNfbyB2ZWN0b3IgZG91YmxlCit2ZWNfc2xkdyh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIGludCBfX2MpCisgIF9fY29uc3RhbnRfcmFuZ2UoX19jLCAwLCAzKTsKKworI2RlZmluZSB2ZWNfc2xkdyhYLCBZLCBaKSAoKF9fdHlwZW9mX18oKHZlY19zbGR3KSgoWCksIChZKSwgKFopKSkpIFwKKyAgX19idWlsdGluX3MzOTBfdnNsZGIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpKFkpLCAoWikgKiA0KSkKKworLyotLSB2ZWNfc3JhbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcmFsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NyYWwodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19zcmFsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JhKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNyYShfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNyYShfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmFsKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zcmFsKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcmFsKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NyYWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX3NyYWwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3JhbCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc3JhbCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmEoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JhbCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNyYSgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKi0tIHZlY19zcmFiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NyYWIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNyYWIoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JhYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX3NyYWIodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcmFiKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmFiKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3JhYih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWIodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmFiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JhYih2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYWIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JhYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3NyYWIodmVjdG9yIGRvdWJsZSBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19zcmFiKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBkb3VibGUpX19idWlsdGluX3MzOTBfdnNyYWIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKKy8qLS0gdmVjX3NybCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JsKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX3NybCh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfc3JsKHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NybCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX3NybCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JsKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JsKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmwoX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NybCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX3NybCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zcmwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19zcmwodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NybCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JsKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19zcmwodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc3JsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfc3JsKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmwodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBsb25nIGxvbmcKK3ZlY19zcmwodmVjdG9yIGJvb2wgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmwoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmwodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3JsKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybCgKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworLyotLSB2ZWNfc3JiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19zcmIodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfc3JiKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcmxiKF9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3JsYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19zcmIodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX3NyYih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfc3JiKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JiKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfc3JiKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGludClfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX3NyYih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX3NyYih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19idWlsdGluX3MzOTBfdnNybGIoCisgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19zcmIodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3NyYih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGRvdWJsZSlfX2J1aWx0aW5fczM5MF92c3JsYigKKyAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLCAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGRvdWJsZQordmVjX3NyYih2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgZG91YmxlKV9fYnVpbHRpbl9zMzkwX3ZzcmxiKAorICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKi0tIHZlY19hYnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2Ficyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgLV9fYSwgdmVjX2NtcGx0KF9fYSwgKHZlY3RvciBzaWduZWQgY2hhcikwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19hYnModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCAtX19hLCB2ZWNfY21wbHQoX19hLCAodmVjdG9yIHNpZ25lZCBzaG9ydCkwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfYWJzKHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gdmVjX3NlbChfX2EsIC1fX2EsIHZlY19jbXBsdChfX2EsICh2ZWN0b3Igc2lnbmVkIGludCkwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfYWJzKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSkgeworICByZXR1cm4gdmVjX3NlbChfX2EsIC1fX2EsIHZlY19jbXBsdChfX2EsICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZykwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19hYnModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmbHBkYihfX2EpOworfQorCisvKi0tIHZlY19uYWJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbmFicyh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZsbmRiKF9fYSk7Cit9CisKKy8qLS0gdmVjX21heCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWF4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYmMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21heCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19tYXgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX21heCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYWMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21heCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2FjLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWF4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciBzaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBpbnQpX19iOworICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tYXgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciBzaWduZWQgaW50IF9fYWMgPSAodmVjdG9yIHNpZ25lZCBpbnQpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21heCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19iYywgX19hLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tYXgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hOworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYWMsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19tYXgodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19iLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21heCh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYmMsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21heCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbWF4KHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19tYXgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gdmVjX3NlbChfX2JjLCBfX2EsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21heCh2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYiwgX19hYywgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbWF4KHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2IsIF9fYSwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKKy8qLS0gdmVjX21pbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWluKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYmMgPSAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21pbih2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iOworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19taW4odmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX21pbih2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHZlY3RvciBzaWduZWQgc2hvcnQgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIHNob3J0KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYWMgPSAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYmMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21pbih2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYTsKKyAgcmV0dXJuIHZlY19zZWwoX19hYywgX19iLCB2ZWNfY21wZ3QoX19hYywgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbWluKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iLCB2ZWNfY21wZ3QoX19hLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciBzaWduZWQgaW50IF9fYmMgPSAodmVjdG9yIHNpZ25lZCBpbnQpX19iOworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19taW4odmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHZlY3RvciBzaWduZWQgaW50IF9fYWMgPSAodmVjdG9yIHNpZ25lZCBpbnQpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21pbih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iYyA9ICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYjsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2JjLCB2ZWNfY21wZ3QoX19hLCBfX2JjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19taW4odmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2FjID0gKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hOworICByZXR1cm4gdmVjX3NlbChfX2FjLCBfX2IsIHZlY19jbXBndChfX2FjLCBfX2IpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19taW4odmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIHZlY19zZWwoX19hLCBfX2IsIHZlY19jbXBndChfX2EsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21pbih2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iYyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2I7CisgIHJldHVybiB2ZWNfc2VsKF9fYSwgX19iYywgdmVjX2NtcGd0KF9fYSwgX19iYykpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZwordmVjX21pbih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hYyA9ICh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZylfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbWluKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19taW4odmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciBib29sIGxvbmcgbG9uZyBfX2IpIHsKKyAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2JjID0gKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpX19iOworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYmMsIHZlY19jbXBndChfX2EsIF9fYmMpKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21pbih2ZWN0b3IgYm9vbCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYWMgPSAodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylfX2E7CisgIHJldHVybiB2ZWNfc2VsKF9fYWMsIF9fYiwgdmVjX2NtcGd0KF9fYWMsIF9fYikpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbWluKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYikgeworICByZXR1cm4gdmVjX3NlbChfX2EsIF9fYiwgdmVjX2NtcGd0KF9fYSwgX19iKSk7Cit9CisKKy8qLS0gdmVjX2FkZF91MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfYWRkX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhcShfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2FkZGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19hZGRjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNjYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfYWRkYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY2NmKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX2FkZGModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNjZyhfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2FkZGNfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfYWRkY191MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YWNjcShfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2FkZGVfdTEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfYWRkZV91MTI4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhY3EoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX2FkZGVjX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfYWRkZWNfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmFjY2NxKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19hdmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2F2Zyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19hdmcodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfYXZnKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfYXZnKHZlY3RvciBzaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnZyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfYXZnKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnbGIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19hdmcodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmF2Z2xoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2F2Zyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZhdmdsZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcKK3ZlY19hdmcodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92YXZnbGcoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19jaGVja3N1bSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY2hlY2tzdW0odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Y2tzbShfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2dmbXN1bSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZ2Ztc3VtKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Z2ZtYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19nZm1zdW0odmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfZ2Ztc3VtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWYoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19nZm1zdW1fMTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZ2Ztc3VtXzEyOCh2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1nKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfZ2Ztc3VtX2FjY3VtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19nZm1zdW1fYWNjdW0odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1hYihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2dmbXN1bV9hY2N1bSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWFoKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfZ2Ztc3VtX2FjY3VtKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZnZm1hZihfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfZ2Ztc3VtX2FjY3VtXzEyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2dmbXN1bV9hY2N1bV8xMjgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsCisgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmdmbWFnKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19tbGFkZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21sYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19tbGFkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcilfX2EgKiBfX2IgKyBfX2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX21sYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqICh2ZWN0b3Igc2lnbmVkIGNoYXIpX19iICsgKHZlY3RvciBzaWduZWQgY2hhcilfX2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqIF9fYiArIF9fYzsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2EgKiBfX2IgKyBfX2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19tbGFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2EgKiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2IgKyAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2M7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21sYWRkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21sYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpX19hICogX19iICsgX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21sYWRkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYSAqICh2ZWN0b3Igc2lnbmVkIGludClfX2IgKyAodmVjdG9yIHNpZ25lZCBpbnQpX19jOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfbWxhZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2EgKiBfX2IgKyBfX2M7Cit9CisKKy8qLS0gdmVjX21oYWRkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfbWhhZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFoYihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19taGFkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxoYihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX21oYWRkKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1haGgoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21oYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbGhoKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX21oYWRkKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1haGYoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19taGFkZCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxoZihfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfbWVhZGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbWVhZGQodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hZWIoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX21lYWRkKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxlYihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tZWFkZCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFlaChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX21lYWRkKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWxlaChfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19tZWFkZCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYWVmKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfbWVhZGQodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsZWYoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX21vYWRkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX21vYWRkKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtYW9iKF9fYSwgX19iLCBfX2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tb2FkZCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsb2IoX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfbW9hZGQodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciBzaWduZWQgaW50IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hb2goX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tb2FkZCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFsb2goX19hLCBfX2IsIF9fYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfbW9hZGQodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWFvZihfX2EsIF9fYiwgX19jKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX21vYWRkKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1hbG9mKF9fYSwgX19iLCBfX2MpOworfQorCisvKi0tIHZlY19tdWxoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX211bGgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1oYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfbXVsaCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1saGIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfbXVsaCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtaGgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19tdWxoKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbGhoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tdWxoKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWhmKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX211bGgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxoZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX211bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX211bGUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1lYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX211bGUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbGViKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tdWxlKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1laChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tdWxlKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbGVoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19tdWxlKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWVmKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX211bGUodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxlZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX211bG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX211bG8odmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1vYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX211bG8odmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbG9iKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19tdWxvKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdm1vaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19tdWxvKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZtbG9oKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBsb25nIGxvbmcKK3ZlY19tdWxvKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bW9mKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX211bG8odmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92bWxvZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3N1Yl91MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3ViX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzcShfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3N1YmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zdWJjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2NiaWIoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19zdWJjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzY2JpaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zdWJjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNjYmlmKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZwordmVjX3N1YmModmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c2NiaWcoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19zdWJjX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX3N1YmNfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNjYmlxKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfc3ViZV91MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zdWJlX3UxMjgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNiaXEoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX3N1YmVjX3UxMjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3ViZWNfdTEyOCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnNiY2JpcShfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfc3VtMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3VtMih2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtZ2goX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfc3VtMih2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdW1nZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX3N1bV91MTI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19zdW1fdTEyOCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdW1xZihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfc3VtX3UxMjgodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtcWcoX19hLCBfX2IpOworfQorCisvKi0tIHZlY19zdW00IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zdW00KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3VtYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19zdW00KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdW1oKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfdGVzdF9tYXNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSBpbnQKK3ZlY190ZXN0X21hc2sodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3Igc2lnbmVkIGxvbmcgbG9uZyBfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92dG0oKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgaW50Cit2ZWNfdGVzdF9tYXNrKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnRtKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIGludAordmVjX3Rlc3RfbWFzayh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Z0bSgodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCisvKi0tIHZlY19tYWRkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbWFkZCh2ZWN0b3IgZG91YmxlIF9fYSwgdmVjdG9yIGRvdWJsZSBfX2IsIHZlY3RvciBkb3VibGUgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92Zm1hZGIoX19hLCBfX2IsIF9fYyk7Cit9CisKKy8qLS0gdmVjX21zdWIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19tc3ViKHZlY3RvciBkb3VibGUgX19hLCB2ZWN0b3IgZG91YmxlIF9fYiwgdmVjdG9yIGRvdWJsZSBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmbXNkYihfX2EsIF9fYiwgX19jKTsKK30KKworLyotLSB2ZWNfc3FydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3NxcnQodmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zmc3FkYihfX2EpOworfQorCisvKi0tIHZlY19sZDJmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfbGQyZihjb25zdCBmbG9hdCAqX19wdHIpIHsKKyAgdHlwZWRlZiBmbG9hdCBfX3YyZjMyIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOworICByZXR1cm4gX19idWlsdGluX2NvbnZlcnR2ZWN0b3IoKihjb25zdCBfX3YyZjMyICopX19wdHIsIHZlY3RvciBkb3VibGUpOworfQorCisvKi0tIHZlY19zdDJmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2b2lkCit2ZWNfc3QyZih2ZWN0b3IgZG91YmxlIF9fYSwgZmxvYXQgKl9fcHRyKSB7CisgIHR5cGVkZWYgZmxvYXQgX192MmYzMiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKKyAgKihfX3YyZjMyICopX19wdHIgPSBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIF9fdjJmMzIpOworfQorCisvKi0tIHZlY19jdGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBkb3VibGUKK3ZlY19jdGQodmVjdG9yIHNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYiwgMCwgMzEpIHsKKyAgdmVjdG9yIGRvdWJsZSBfX2NvbnYgPSBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIHZlY3RvciBkb3VibGUpOworICBfX2NvbnYgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCAtIF9fYikgPDwgNTIpOworICByZXR1cm4gX19jb252OworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgZG91YmxlCit2ZWNfY3RkKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcgX19hLCBpbnQgX19iKQorICBfX2NvbnN0YW50X3JhbmdlKF9fYiwgMCwgMzEpIHsKKyAgdmVjdG9yIGRvdWJsZSBfX2NvbnYgPSBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIHZlY3RvciBkb3VibGUpOworICBfX2NvbnYgKj0gKHZlY3RvciBkb3VibGUpKHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpKCgweDNmZlVMTCAtIF9fYikgPDwgNTIpOworICByZXR1cm4gX19jb252OworfQorCisvKi0tIHZlY19jdHNsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgbG9uZyBsb25nCit2ZWNfY3RzbCh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYikKKyAgX19jb25zdGFudF9yYW5nZShfX2IsIDAsIDMxKSB7CisgIF9fYSAqPSAodmVjdG9yIGRvdWJsZSkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKDB4M2ZmVUxMICsgX19iKSA8PCA1Mik7CisgIHJldHVybiBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIHZlY3RvciBzaWduZWQgbG9uZyBsb25nKTsKK30KKworLyotLSB2ZWNfY3R1bCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nCit2ZWNfY3R1bCh2ZWN0b3IgZG91YmxlIF9fYSwgaW50IF9fYikKKyAgX19jb25zdGFudF9yYW5nZShfX2IsIDAsIDMxKSB7CisgIF9fYSAqPSAodmVjdG9yIGRvdWJsZSkodmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZykoKDB4M2ZmVUxMICsgX19iKSA8PCA1Mik7CisgIHJldHVybiBfX2J1aWx0aW5fY29udmVydHZlY3RvcihfX2EsIHZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcpOworfQorCisvKi0tIHZlY19yb3VuZHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfcm91bmRwKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDYpOworfQorCisvKi0tIHZlY19jZWlsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfY2VpbCh2ZWN0b3IgZG91YmxlIF9fYSkgeworICAvLyBPbiB0aGlzIHBsYXRmb3JtLCB2ZWNfY2VpbCBuZXZlciB0cmlnZ2VycyB0aGUgSUVFRS1pbmV4YWN0IGV4Y2VwdGlvbi4KKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgNik7Cit9CisKKy8qLS0gdmVjX3JvdW5kbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19yb3VuZG0odmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmaWRiKF9fYSwgNCwgNyk7Cit9CisKKy8qLS0gdmVjX2Zsb29yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX2FpIHZlY3RvciBkb3VibGUKK3ZlY19mbG9vcih2ZWN0b3IgZG91YmxlIF9fYSkgeworICAvLyBPbiB0aGlzIHBsYXRmb3JtLCB2ZWNfZmxvb3IgbmV2ZXIgdHJpZ2dlcnMgdGhlIElFRUUtaW5leGFjdCBleGNlcHRpb24uCisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDcpOworfQorCisvKi0tIHZlY19yb3VuZHogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfcm91bmR6KHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDUpOworfQorCisvKi0tIHZlY190cnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19haSB2ZWN0b3IgZG91YmxlCit2ZWNfdHJ1bmModmVjdG9yIGRvdWJsZSBfX2EpIHsKKyAgLy8gT24gdGhpcyBwbGF0Zm9ybSwgdmVjX3RydW5jIG5ldmVyIHRyaWdnZXJzIHRoZSBJRUVFLWluZXhhY3QgZXhjZXB0aW9uLgorICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCA1KTsKK30KKworLyotLSB2ZWNfcm91bmRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3JvdW5kYyh2ZWN0b3IgZG91YmxlIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZpZGIoX19hLCA0LCAwKTsKK30KKworLyotLSB2ZWNfcm91bmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfYWkgdmVjdG9yIGRvdWJsZQordmVjX3JvdW5kKHZlY3RvciBkb3VibGUgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmlkYihfX2EsIDQsIDQpOworfQorCisvKi0tIHZlY19mcF90ZXN0X2RhdGFfY2xhc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgdmVjX2ZwX3Rlc3RfZGF0YV9jbGFzcyhYLCBZLCBaKSBcCisgICgodmVjdG9yIGJvb2wgbG9uZyBsb25nKV9fYnVpbHRpbl9zMzkwX3ZmdGNpZGIoKFgpLCAoWSksIChaKSkpCisKKy8qLS0gdmVjX2NwX3VudGlsX3plcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKV9fYnVpbHRpbl9zMzkwX3Zpc3RyYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NwX3VudGlsX3plcm8odmVjdG9yIGJvb2wgY2hhciBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3Zpc3RyYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSkgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJiKF9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciBzaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydClfX2J1aWx0aW5fczM5MF92aXN0cmgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NwX3VudGlsX3plcm8odmVjdG9yIGJvb2wgc2hvcnQgX19hKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdmlzdHJoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY3BfdW50aWxfemVybyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92aXN0cmgoX19hKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciBzaWduZWQgaW50IF9fYSkgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KV9fYnVpbHRpbl9zMzkwX3Zpc3RyZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciBib29sIGludCBfX2EpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdmlzdHJmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jcF91bnRpbF96ZXJvKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92aXN0cmYoX19hKTsKK30KKworLyotLSB2ZWNfY3BfdW50aWxfemVyb19jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92aXN0cmJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92aXN0cmJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3Zpc3RyYnMoX19hLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmlzdHJocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3Zpc3RyaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jcF91bnRpbF96ZXJvX2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmlzdHJocyhfX2EsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92aXN0cmZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2NwX3VudGlsX3plcm9fY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3Zpc3RyZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY3BfdW50aWxfemVyb19jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92aXN0cmZzKF9fYSwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2NtcGVxX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY21wZXFfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZlZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wZXFfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlYihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlaChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY21wZXFfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBlcV9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcGVxX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVmKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfY21wZXFfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBlcV9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlYnMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWVocyhfX2EsIF9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlZnMoX19hLCBfX2IsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBlcV9vcl8wX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZlZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcGVxX29yXzBfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YihfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpoKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBlcV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6ZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcGVxX29yXzBfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZlZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVlemJzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZWV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6aHMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcGVxX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVlemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBlcV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZWV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wZXFfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlZXpmcyhfX2EsIF9fYiwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2NtcG5lX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY21wbmVfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5lX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5lX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmViKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2NtcG5lX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5laCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5laCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWgoX19hLCBfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcG5lX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBuZV9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVmKF9fYSwgX19iKTsKK30KKworLyotLSB2ZWNfY21wbmVfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5lYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVicyhfX2EsIF9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmZW5laHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5laHMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2NtcG5lX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbmVfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBuZV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lZnMoX19hLCBfX2IsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBuZV9vcl8wX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmV6YigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpiKF9fYSwgX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6aChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfY21wbmVfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmVuZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBuZV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5lX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6ZihfX2EsIF9fYik7Cit9CisKKy8qLS0gdmVjX2NtcG5lX29yXzBfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6YnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5lX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZlbmV6YnMoX19hLCBfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wbmVfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemhzKF9fYSwgX19iLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZlbmV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmZW5lemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBuZV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmVuZXpmcyhfX2EsIF9fYiwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2NtcHJnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcHJnKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnN0cmNiKF9fYSwgX19iLCBfX2MsIDQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcHJnKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzdHJjaChfX2EsIF9fYiwgX19jLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wcmcodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzdHJjZihfX2EsIF9fYiwgX19jLCA0KTsKK30KKworLyotLSB2ZWNfY21wcmdfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wcmdfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZzdHJjYnMoX19hLCBfX2IsIF9fYywgNCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wcmdfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92c3RyY2hzKF9fYSwgX19iLCBfX2MsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXByZ19jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92c3RyY2ZzKF9fYSwgX19iLCBfX2MsIDQsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXByZ19pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wcmdfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjYihfX2EsIF9fYiwgX19jLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wcmdfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjaChfX2EsIF9fYiwgX19jLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcHJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2YoX19hLCBfX2IsIF9fYywgMCk7Cit9CisKKy8qLS0gdmVjX2NtcHJnX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXByZ19pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2JzKF9fYSwgX19iLCBfX2MsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXByZ19pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2hzKF9fYSwgX19iLCBfX2MsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wcmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNmcyhfX2EsIF9fYiwgX19jLCAwLCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wcmdfb3JfMF9pZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcHJnX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6YihfX2EsIF9fYiwgX19jLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfY21wcmdfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3poKF9fYSwgX19iLCBfX2MsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wcmdfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3pmKF9fYSwgX19iLCBfX2MsIDApOworfQorCisvKi0tIHZlY19jbXByZ19vcl8wX2lkeF9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wcmdfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemJzKF9fYSwgX19iLCBfX2MsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXByZ19vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6aHMoX19hLCBfX2IsIF9fYywgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXByZ19vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6ZnMoX19hLCBfX2IsIF9fYywgMCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2NtcG5yZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2NtcG5yZyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92c3RyY2IoX19hLCBfX2IsIF9fYywgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2NtcG5yZyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdnN0cmNoKF9fYSwgX19iLCBfX2MsIDEyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfY21wbnJnKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpX19idWlsdGluX3MzOTBfdnN0cmNmKF9fYSwgX19iLCBfX2MsIDEyKTsKK30KKworLyotLSB2ZWNfY21wbnJnX2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfY21wbnJnX2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdnN0cmNicyhfX2EsIF9fYiwgX19jLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfY21wbnJnX2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZzdHJjaHMoX19hLCBfX2IsIF9fYywgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19jbXBucmdfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYywgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZzdHJjZnMoX19hLCBfX2IsIF9fYywgMTIsIF9fY2MpOworfQorCisvKi0tIHZlY19jbXBucmdfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbnJnX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNiKF9fYSwgX19iLCBfX2MsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBucmdfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2goX19hLCBfX2IsIF9fYywgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19jbXBucmdfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY2YoX19hLCBfX2IsIF9fYywgOCk7Cit9CisKKy8qLS0gdmVjX2NtcG5yZ19pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19jbXBucmdfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjYnMoX19hLCBfX2IsIF9fYywgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5yZ19pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNocyhfX2EsIF9fYiwgX19jLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5yZ19pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmNmcyhfX2EsIF9fYiwgX19jLCA4LCBfX2NjKTsKK30KKworLyotLSB2ZWNfY21wbnJnX29yXzBfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2NtcG5yZ19vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3piKF9fYSwgX19iLCBfX2MsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19jbXBucmdfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6aChfX2EsIF9fYiwgX19jLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2NtcG5yZ19vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgX19jKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92c3RyY3pmKF9fYSwgX19iLCBfX2MsIDgpOworfQorCisvKi0tIHZlY19jbXBucmdfb3JfMF9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfY21wbnJnX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6YnMoX19hLCBfX2IsIF9fYywgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2NtcG5yZ19vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19jLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZzdHJjemhzKF9fYSwgX19iLCBfX2MsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfY21wbnJnX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCBfX2MsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdnN0cmN6ZnMoX19hLCBfX2IsIF9fYywgOCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X2VxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X2VxKHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdmZhZWIoX19hLCBfX2IsIDQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X2VxKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdmZhZWgoX19hLCBfX2IsIDQpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9lcSh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA0KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfZXEodmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZmYWVmKF9fYSwgX19iLCA0KTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfZXFfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYnMoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgNCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgY2hhcilfX2J1aWx0aW5fczM5MF92ZmFlYnMoX19hLCBfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA0LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgNCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBzaG9ydClfX2J1aWx0aW5fczM5MF92ZmFlaHMoX19hLCBfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgNCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X2VxX2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDQsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBpbnQKK3ZlY19maW5kX2FueV9lcV9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KV9fYnVpbHRpbl9zMzkwX3ZmYWVmcyhfX2EsIF9fYiwgNCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X2VxX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYihfX2EsIF9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaChfX2EsIF9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9pZHgodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X2VxX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKF9fYSwgX19iLCAwKTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfZXFfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlYnMoX19hLCBfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlaHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVocyhfX2EsIF9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfZXFfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZnMoX19hLCBfX2IsIDAsIF9fY2MpOworfQorCisvKi0tIHZlY19maW5kX2FueV9lcV9vcl8wX2lkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciBzaWduZWQgY2hhciBfX2EsIHZlY3RvciBzaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4KHZlY3RvciBib29sIGNoYXIgX19hLCB2ZWN0b3IgYm9vbCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpiKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YihfX2EsIF9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDApOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHgodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpoKF9fYSwgX19iLCAwKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemYoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZihfX2EsIF9fYiwgMCk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6YnMoX19hLCBfX2IsIDAsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfZXFfb3JfMF9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X2VxX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemhzKF9fYSwgX19iLCAwLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGludCBfX2EsIHZlY3RvciBzaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgMCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9lcV9vcl8wX2lkeF9jYyh2ZWN0b3IgdW5zaWduZWQgaW50IF9fYSwgdmVjdG9yIHVuc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemZzKF9fYSwgX19iLCAwLCBfX2NjKTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9uZSh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgMTIpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBjaGFyCit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKV9fYnVpbHRpbl9zMzkwX3ZmYWViKF9fYSwgX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDEyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9uZSh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KV9fYnVpbHRpbl9zMzkwX3ZmYWVoKF9fYSwgX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X25lKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDEyKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfbmUodmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAxMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X25lKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92ZmFlZihfX2EsIF9fYiwgMTIpOworfQorCisvKi0tIHZlY19maW5kX2FueV9uZV9jYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBjaGFyKQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVicygodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGNoYXIKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDEyLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgY2hhcgordmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGNoYXIpX19idWlsdGluX3MzOTBfdmZhZWJzKF9fYSwgX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDEyLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgMTIsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgYm9vbCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIGJvb2wgc2hvcnQpX19idWlsdGluX3MzOTBfdmZhZWhzKF9fYSwgX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3IgYm9vbCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCAxMiwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBib29sIGludAordmVjX2ZpbmRfYW55X25lX2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDEyLCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIGJvb2wgaW50Cit2ZWNfZmluZF9hbnlfbmVfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBib29sIGludClfX2J1aWx0aW5fczM5MF92ZmFlZnMoX19hLCBfX2IsIDEyLCBfX2NjKTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfbmVfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlYigodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWViKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWViKF9fYSwgX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlaCgodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVoKF9fYSwgX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9pZHgodmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGludCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX2lkeCh2ZWN0b3IgYm9vbCBpbnQgX19hLCB2ZWN0b3IgYm9vbCBpbnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGludClfX2IsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgaW50Cit2ZWNfZmluZF9hbnlfbmVfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWYoX19hLCBfX2IsIDgpOworfQorCisvKi0tIHZlY19maW5kX2FueV9uZV9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIGNoYXIpCisgICAgX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX2lkeF9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVicyhfX2EsIF9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIHNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciBzaWduZWQgc2hvcnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuICh2ZWN0b3Igc2lnbmVkIHNob3J0KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVocygodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIGJvb2wgc2hvcnQgX19hLCB2ZWN0b3IgYm9vbCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2EsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZWhzKF9fYSwgX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIHNpZ25lZCBpbnQgX19hLCB2ZWN0b3Igc2lnbmVkIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcygodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIGJvb2wgaW50IF9fYSwgdmVjdG9yIGJvb2wgaW50IF9fYiwgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBpbnQKK3ZlY19maW5kX2FueV9uZV9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIGludCBfX2EsIHZlY3RvciB1bnNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWVmcyhfX2EsIF9fYiwgOCwgX19jYyk7Cit9CisKKy8qLS0gdmVjX2ZpbmRfYW55X25lX29yXzBfaWR4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIHNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBjaGFyCit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHgodmVjdG9yIGJvb2wgY2hhciBfX2EsIHZlY3RvciBib29sIGNoYXIgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemIoKHZlY3RvciB1bnNpZ25lZCBjaGFyKV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2EsIHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpiKF9fYSwgX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciBzaWduZWQgc2hvcnQgX19hLCB2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYikgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgc2hvcnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpoKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIHNob3J0KV9fYiwgOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciB1bnNpZ25lZCBzaG9ydAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciBib29sIHNob3J0IF9fYSwgdmVjdG9yIGJvb2wgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemgoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemgoX19hLCBfX2IsIDgpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBpbnQpCisgICAgX19idWlsdGluX3MzOTBfdmZhZXpmKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZigodmVjdG9yIHVuc2lnbmVkIGludClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4KTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4KHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYikgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpmKF9fYSwgX19iLCA4KTsKK30KKworLyotLSB2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIGNoYXIgX19hLCB2ZWN0b3Igc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgY2hhcikKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVjdG9yIHVuc2lnbmVkIGNoYXIpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGNoYXIKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBjaGFyIF9fYSwgdmVjdG9yIGJvb2wgY2hhciBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemJzKCh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgY2hhcilfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgY2hhcgordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBjaGFyIF9fYSwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gX19idWlsdGluX3MzOTBfdmZhZXpicyhfX2EsIF9fYiwgOCwgX19jYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19BVFRSU19vX2FpIHZlY3RvciBzaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3Igc2lnbmVkIHNob3J0IF9fYSwgdmVjdG9yIHNpZ25lZCBzaG9ydCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiAodmVjdG9yIHNpZ25lZCBzaG9ydCkKKyAgICBfX2J1aWx0aW5fczM5MF92ZmFlemhzKCh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKK3ZlY19maW5kX2FueV9uZV9vcl8wX2lkeF9jYyh2ZWN0b3IgYm9vbCBzaG9ydCBfX2EsIHZlY3RvciBib29sIHNob3J0IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aHMoKHZlY3RvciB1bnNpZ25lZCBzaG9ydClfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIHNob3J0Cit2ZWNfZmluZF9hbnlfbmVfb3JfMF9pZHhfY2ModmVjdG9yIHVuc2lnbmVkIHNob3J0IF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgX19iLCBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6aHMoX19hLCBfX2IsIDgsIF9fY2MpOworfQorCitzdGF0aWMgaW5saW5lIF9fQVRUUlNfb19haSB2ZWN0b3Igc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciBzaWduZWQgaW50IF9fYSwgdmVjdG9yIHNpZ25lZCBpbnQgX19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19jYykgeworICByZXR1cm4gKHZlY3RvciBzaWduZWQgaW50KQorICAgIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZnMoKHZlY3RvciB1bnNpZ25lZCBpbnQpX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciBib29sIGludCBfX2EsIHZlY3RvciBib29sIGludCBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2NjKSB7CisgIHJldHVybiBfX2J1aWx0aW5fczM5MF92ZmFlemZzKCh2ZWN0b3IgdW5zaWduZWQgaW50KV9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZlY3RvciB1bnNpZ25lZCBpbnQpX19iLCA4LCBfX2NjKTsKK30KKworc3RhdGljIGlubGluZSBfX0FUVFJTX29fYWkgdmVjdG9yIHVuc2lnbmVkIGludAordmVjX2ZpbmRfYW55X25lX29yXzBfaWR4X2NjKHZlY3RvciB1bnNpZ25lZCBpbnQgX19hLCB2ZWN0b3IgdW5zaWduZWQgaW50IF9fYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fY2MpIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zMzkwX3ZmYWV6ZnMoX19hLCBfX2IsIDgsIF9fY2MpOworfQorCisjdW5kZWYgX19jb25zdGFudF9wb3cyX3JhbmdlCisjdW5kZWYgX19jb25zdGFudF9yYW5nZQorI3VuZGVmIF9fY29uc3RhbnQKKyN1bmRlZiBfX0FUVFJTX28KKyN1bmRlZiBfX0FUVFJTX29fYWkKKyN1bmRlZiBfX0FUVFJTX2FpCisKKyNlbHNlCisKKyNlcnJvciAiVXNlIC1menZlY3RvciB0byBlbmFibGUgdmVjdG9yIGV4dGVuc2lvbnMiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS93bW1pbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvd21taW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkOTMxMAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUvd21taW50cmluLmgKQEAgLTAsMCArMSwzMyBAQAorLyo9PT0tLS0tIHdtbWludHJpbi5oIC0gQUVTIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9XTU1JTlRSSU5fSAorI2RlZmluZSBfV01NSU5UUklOX0gKKworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorCisjaW5jbHVkZSA8X193bW1pbnRyaW5fYWVzLmg+CisKKyNpbmNsdWRlIDxfX3dtbWludHJpbl9wY2xtdWwuaD4KKworI2VuZGlmIC8qIF9XTU1JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94ODZpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveDg2aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4MDc3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveDg2aW50cmluLmgKQEAgLTAsMCArMSw1NyBAQAorLyo9PT0tLS0tIHg4NmludHJpbi5oIC0gWDg2IGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1g4NklOVFJJTl9ICisjZGVmaW5lIF9fWDg2SU5UUklOX0gKKworI2luY2x1ZGUgPGlhMzJpbnRyaW4uaD4KKworI2luY2x1ZGUgPGltbWludHJpbi5oPgorCisjaW5jbHVkZSA8bW0zZG5vdy5oPgorCisjaW5jbHVkZSA8Ym1paW50cmluLmg+CisKKyNpbmNsdWRlIDxibWkyaW50cmluLmg+CisKKyNpbmNsdWRlIDxsemNudGludHJpbi5oPgorCisjaW5jbHVkZSA8cG9wY250aW50cmluLmg+CisKKyNpbmNsdWRlIDxyZHNlZWRpbnRyaW4uaD4KKworI2luY2x1ZGUgPHByZmNod2ludHJpbi5oPgorCisjaW5jbHVkZSA8YW1taW50cmluLmg+CisKKyNpbmNsdWRlIDxmbWE0aW50cmluLmg+CisKKyNpbmNsdWRlIDx4b3BpbnRyaW4uaD4KKworI2luY2x1ZGUgPHRibWludHJpbi5oPgorCisjaW5jbHVkZSA8ZjE2Y2ludHJpbi5oPgorCisvKiBGSVhNRTogTFdQICovCisKKyNlbmRpZiAvKiBfX1g4NklOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3htbWludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94bW1pbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTBiMmNkCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94bW1pbnRyaW4uaApAQCAtMCwwICsxLDEwMTAgQEAKKy8qPT09LS0tLSB4bW1pbnRyaW4uaCAtIFNTRSBpbnRyaW5zaWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19YTU1JTlRSSU5fSAorI2RlZmluZSBfX1hNTUlOVFJJTl9ICisKKyNpbmNsdWRlIDxtbWludHJpbi5oPgorCit0eXBlZGVmIGludCBfX3Y0c2kgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBmbG9hdCBfX3Y0c2YgX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOwordHlwZWRlZiBmbG9hdCBfX20xMjggX19hdHRyaWJ1dGVfXygoX192ZWN0b3Jfc2l6ZV9fKDE2KSkpOworCisvKiBUaGlzIGhlYWRlciBzaG91bGQgb25seSBiZSBpbmNsdWRlZCBpbiBhIGhvc3RlZCBlbnZpcm9ubWVudCBhcyBpdCBkZXBlbmRzIG9uCisgKiBhIHN0YW5kYXJkIGxpYnJhcnkgdG8gcHJvdmlkZSBhbGxvY2F0aW9uIHJvdXRpbmVzLiAqLworI2lmIF9fU1REQ19IT1NURURfXworI2luY2x1ZGUgPG1tX21hbGxvYy5oPgorI2VuZGlmCisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgX190YXJnZXRfXygic3NlIikpKQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYWRkX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIF9fYVswXSArPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9hZGRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N1Yl9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICBfX2FbMF0gLT0gX19iWzBdOworICByZXR1cm4gX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3ViX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tdWxfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgX19hWzBdICo9IF9fYlswXTsKKyAgcmV0dXJuIF9fYTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX211bF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19hICogX19iOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZGl2X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIF9fYVswXSAvPSBfX2JbMF07CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9kaXZfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NxcnRfc3MoX19tMTI4IF9fYSkKK3sKKyAgX19tMTI4IF9fYyA9IF9fYnVpbHRpbl9pYTMyX3NxcnRzcyhfX2EpOworICByZXR1cm4gKF9fbTEyOCkgeyBfX2NbMF0sIF9fYVsxXSwgX19hWzJdLCBfX2FbM10gfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NxcnRfcHMoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3NxcnRwcyhfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcmNwX3NzKF9fbTEyOCBfX2EpCit7CisgIF9fbTEyOCBfX2MgPSBfX2J1aWx0aW5faWEzMl9yY3BzcyhfX2EpOworICByZXR1cm4gKF9fbTEyOCkgeyBfX2NbMF0sIF9fYVsxXSwgX19hWzJdLCBfX2FbM10gfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JjcF9wcyhfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfcmNwcHMoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JzcXJ0X3NzKF9fbTEyOCBfX2EpCit7CisgIF9fbTEyOCBfX2MgPSBfX2J1aWx0aW5faWEzMl9yc3FydHNzKF9fYSk7CisgIHJldHVybiAoX19tMTI4KSB7IF9fY1swXSwgX19hWzFdLCBfX2FbMl0sIF9fYVszXSB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcnNxcnRfcHMoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3JzcXJ0cHMoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbWluc3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWluX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9taW5wcyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYXhfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21heHNzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfbWF4cHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYW5kX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSgoX192NHNpKV9fYSAmIChfX3Y0c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2FuZG5vdF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOCkofihfX3Y0c2kpX19hICYgKF9fdjRzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fb3JfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpKChfX3Y0c2kpX19hIHwgKF9fdjRzaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1feG9yX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KSgoX192NHNpKV9fYSBeIChfX3Y0c2kpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGVxX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGVxc3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZXFfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wZXFwcyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsdHNzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGx0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGx0cHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbGVfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbGVzcyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBsZV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBsZXBzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGd0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbHRzcyhfX2IsIF9fYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEsIDIsIDMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wZ3RfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbHRwcyhfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBnZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9pYTMyX2NtcGxlc3MoX19iLCBfX2EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAxLCAyLCAzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcGdlX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcGxlcHMoX19iLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmVxX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5lcXNzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5lcV9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBuZXFwcyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBubHRfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmx0c3MoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmx0X3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5sdHBzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5sZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBubGVzcyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBubGVfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wbmxlcHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmd0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2lhMzJfY21wbmx0c3MoX19iLCBfX2EpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAxLCAyLCAzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG5ndF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBubHRwcyhfX2IsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBuZ2Vfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5faWEzMl9jbXBubGVzcyhfX2IsIF9fYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEsIDIsIDMpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wbmdlX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2NtcG5sZXBzKF9fYiwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NtcG9yZF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXBvcmRzcyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXBvcmRfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wb3JkcHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21wdW5vcmRfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY21wdW5vcmRzcyhfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jbXB1bm9yZF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl9jbXB1bm9yZHBzKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWllcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWVxKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlsdF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWx0KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlsZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWxlKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlndF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWd0KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWlnZV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY29taWdlKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWluZXFfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWluZXEoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdWNvbWllcV9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWllcShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWx0X3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taWx0KF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbGVfc3MoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pbGUoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdWNvbWlndF9zcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlndChfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV91Y29taWdlX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taWdlKF9fYSwgX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3Vjb21pbmVxX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl91Y29taW5lcShfX2EsIF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzc19zaTMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzczJzaShfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0X3NzMnNpKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfbW1fY3Z0c3Nfc2kzMihfX2EpOworfQorCisjaWZkZWYgX194ODZfNjRfXworCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c3Nfc2k2NChfX20xMjggX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c3Myc2k2NChfX2EpOworfQorCisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cHNfcGkzMihfX20xMjggX19hKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX2N2dHBzMnBpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dF9wczJwaShfX20xMjggX19hKQoreworICByZXR1cm4gX21tX2N2dHBzX3BpMzIoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzc19zaTMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2FbMF07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnR0X3NzMnNpKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfbW1fY3Z0dHNzX3NpMzIoX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRzc19zaTY0KF9fbTEyOCBfX2EpCit7CisgIHJldHVybiBfX2FbMF07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRwc19waTMyKF9fbTEyOCBfX2EpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfY3Z0dHBzMnBpKF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHRfcHMycGkoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9tbV9jdnR0cHNfcGkzMihfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0c2kzMl9zcyhfX20xMjggX19hLCBpbnQgX19iKQoreworICBfX2FbMF0gPSBfX2I7CisgIHJldHVybiBfX2E7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRfc2kyc3MoX19tMTI4IF9fYSwgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9tbV9jdnRzaTMyX3NzKF9fYSwgX19iKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHNpNjRfc3MoX19tMTI4IF9fYSwgbG9uZyBsb25nIF9fYikKK3sKKyAgX19hWzBdID0gX19iOworICByZXR1cm4gX19hOworfQorCisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBpMzJfcHMoX19tMTI4IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0cGkycHMoX19hLCAoX192MnNpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRfcGkycHMoX19tMTI4IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gX21tX2N2dHBpMzJfcHMoX19hLCBfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBmbG9hdCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRzc19mMzIoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYVswXTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRoX3BpKF9fbTEyOCBfX2EsIGNvbnN0IF9fbTY0ICpfX3ApCit7CisgIHR5cGVkZWYgZmxvYXQgX19tbV9sb2FkaF9waV92MmYzMiBfX2F0dHJpYnV0ZV9fKChfX3ZlY3Rvcl9zaXplX18oOCkpKTsKKyAgc3RydWN0IF9fbW1fbG9hZGhfcGlfc3RydWN0IHsKKyAgICBfX21tX2xvYWRoX3BpX3YyZjMyIF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIF9fbW1fbG9hZGhfcGlfdjJmMzIgX19iID0gKChzdHJ1Y3QgX19tbV9sb2FkaF9waV9zdHJ1Y3QqKV9fcCktPl9fdTsKKyAgX19tMTI4IF9fYmIgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2IsIF9fYiwgMCwgMSwgMCwgMSk7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYmIsIDAsIDEsIDQsIDUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbG9hZGxfcGkoX19tMTI4IF9fYSwgY29uc3QgX19tNjQgKl9fcCkKK3sKKyAgdHlwZWRlZiBmbG9hdCBfX21tX2xvYWRsX3BpX3YyZjMyIF9fYXR0cmlidXRlX18oKF9fdmVjdG9yX3NpemVfXyg4KSkpOworICBzdHJ1Y3QgX19tbV9sb2FkbF9waV9zdHJ1Y3QgeworICAgIF9fbW1fbG9hZGxfcGlfdjJmMzIgX191OworICB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18sIF9fbWF5X2FsaWFzX18pKTsKKyAgX19tbV9sb2FkbF9waV92MmYzMiBfX2IgPSAoKHN0cnVjdCBfX21tX2xvYWRsX3BpX3N0cnVjdCopX19wKS0+X191OworICBfX20xMjggX19iYiA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYiwgX19iLCAwLCAxLCAwLCAxKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iYiwgNCwgNSwgMiwgMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkX3NzKGNvbnN0IGZsb2F0ICpfX3ApCit7CisgIHN0cnVjdCBfX21tX2xvYWRfc3Nfc3RydWN0IHsKKyAgICBmbG9hdCBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICBmbG9hdCBfX3UgPSAoKHN0cnVjdCBfX21tX2xvYWRfc3Nfc3RydWN0KilfX3ApLT5fX3U7CisgIHJldHVybiAoX19tMTI4KXsgX191LCAwLCAwLCAwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkMV9wcyhjb25zdCBmbG9hdCAqX19wKQoreworICBzdHJ1Y3QgX19tbV9sb2FkMV9wc19zdHJ1Y3QgeworICAgIGZsb2F0IF9fdTsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIGZsb2F0IF9fdSA9ICgoc3RydWN0IF9fbW1fbG9hZDFfcHNfc3RydWN0KilfX3ApLT5fX3U7CisgIHJldHVybiAoX19tMTI4KXsgX191LCBfX3UsIF9fdSwgX191IH07Cit9CisKKyNkZWZpbmUgICAgICAgIF9tbV9sb2FkX3BzMShwKSBfbW1fbG9hZDFfcHMocCkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2xvYWRfcHMoY29uc3QgZmxvYXQgKl9fcCkKK3sKKyAgcmV0dXJuICooX19tMTI4KilfX3A7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2FkdV9wcyhjb25zdCBmbG9hdCAqX19wKQoreworICBzdHJ1Y3QgX19sb2FkdV9wcyB7CisgICAgX19tMTI4IF9fdjsKKyAgfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fLCBfX21heV9hbGlhc19fKSk7CisgIHJldHVybiAoKHN0cnVjdCBfX2xvYWR1X3BzKilfX3ApLT5fX3Y7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9sb2Fkcl9wcyhjb25zdCBmbG9hdCAqX19wKQoreworICBfX20xMjggX19hID0gX21tX2xvYWRfcHMoX19wKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAzLCAyLCAxLCAwKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VuZGVmaW5lZF9wcygpCit7CisgIHJldHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX3VuZGVmMTI4KCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfc3MoZmxvYXQgX193KQoreworICByZXR1cm4gKF9fbTEyOCl7IF9fdywgMCwgMCwgMCB9OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2V0MV9wcyhmbG9hdCBfX3cpCit7CisgIHJldHVybiAoX19tMTI4KXsgX193LCBfX3csIF9fdywgX193IH07Cit9CisKKy8qIE1pY3Jvc29mdCBzcGVjaWZpYy4gKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRfcHMxKGZsb2F0IF9fdykKK3sKKyAgICByZXR1cm4gX21tX3NldDFfcHMoX193KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldF9wcyhmbG9hdCBfX3osIGZsb2F0IF9feSwgZmxvYXQgX194LCBmbG9hdCBfX3cpCit7CisgIHJldHVybiAoX19tMTI4KXsgX193LCBfX3gsIF9feSwgX196IH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZXRyX3BzKGZsb2F0IF9feiwgZmxvYXQgX195LCBmbG9hdCBfX3gsIGZsb2F0IF9fdykKK3sKKyAgcmV0dXJuIChfX20xMjgpeyBfX3osIF9feSwgX194LCBfX3cgfTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldHplcm9fcHModm9pZCkKK3sKKyAgcmV0dXJuIChfX20xMjgpeyAwLCAwLCAwLCAwIH07Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVoX3BpKF9fbTY0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlaHBzKChfX3Yyc2kgKilfX3AsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVsX3BpKF9fbTY0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgIF9fYnVpbHRpbl9pYTMyX3N0b3JlbHBzKChfX3Yyc2kgKilfX3AsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVfc3MoZmxvYXQgKl9fcCwgX19tMTI4IF9fYSkKK3sKKyAgc3RydWN0IF9fbW1fc3RvcmVfc3Nfc3RydWN0IHsKKyAgICBmbG9hdCBfX3U7CisgIH0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXywgX19tYXlfYWxpYXNfXykpOworICAoKHN0cnVjdCBfX21tX3N0b3JlX3NzX3N0cnVjdCopX19wKS0+X191ID0gX19hWzBdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JldV9wcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICBfX2J1aWx0aW5faWEzMl9zdG9yZXVwcyhfX3AsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmUxX3BzKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgIF9fYSA9IF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19hLCAwLCAwLCAwLCAwKTsKKyAgX21tX3N0b3JldV9wcyhfX3AsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc3RvcmVfcHMxKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgICAgcmV0dXJuIF9tbV9zdG9yZTFfcHMoX19wLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3JlX3BzKGZsb2F0ICpfX3AsIF9fbTEyOCBfX2EpCit7CisgICooX19tMTI4ICopX19wID0gX19hOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0b3Jlcl9wcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICBfX2EgPSBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYSwgMywgMiwgMSwgMCk7CisgIF9tbV9zdG9yZV9wcyhfX3AsIF9fYSk7Cit9CisKKyNkZWZpbmUgX01NX0hJTlRfVDAgMworI2RlZmluZSBfTU1fSElOVF9UMSAyCisjZGVmaW5lIF9NTV9ISU5UX1QyIDEKKyNkZWZpbmUgX01NX0hJTlRfTlRBIDAKKworI2lmbmRlZiBfTVNDX1ZFUgorLyogRklYTUU6IFdlIGhhdmUgdG8gI2RlZmluZSB0aGlzIGJlY2F1c2UgInNlbCIgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIsIGFuZAorICAgU2VtYSBkb2Vzbid0IGRvIGFueSBmb3JtIG9mIGNvbnN0YW50IHByb3BhZ2F0aW9uIHlldC4gKi8KKworI2RlZmluZSBfbW1fcHJlZmV0Y2goYSwgc2VsKSAoX19idWlsdGluX3ByZWZldGNoKCh2b2lkICopKGEpLCAwLCAoc2VsKSkpCisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zdHJlYW1fcGkoX19tNjQgKl9fcCwgX19tNjQgX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudHEoX19wLCBfX2EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3N0cmVhbV9wcyhmbG9hdCAqX19wLCBfX20xMjggX19hKQoreworICBfX2J1aWx0aW5faWEzMl9tb3ZudHBzKF9fcCwgX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zZmVuY2Uodm9pZCkKK3sKKyAgX19idWlsdGluX2lhMzJfc2ZlbmNlKCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9leHRyYWN0X3BpMTYoX19tNjQgX19hLCBpbnQgX19uKQoreworICBfX3Y0aGkgX19iID0gKF9fdjRoaSlfX2E7CisgIHJldHVybiAodW5zaWduZWQgc2hvcnQpX19iW19fbiAmIDNdOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9pbnNlcnRfcGkxNihfX202NCBfX2EsIGludCBfX2QsIGludCBfX24pCit7CisgICBfX3Y0aGkgX19iID0gKF9fdjRoaSlfX2E7CisgICBfX2JbX19uICYgM10gPSBfX2Q7CisgICByZXR1cm4gKF9fbTY0KV9fYjsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWF4X3BpMTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1heHN3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21heF9wdTgoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcG1heHViKChfX3Y4cWkpX19hLCAoX192OHFpKV9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21pbl9waTE2KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BtaW5zdygoX192NGhpKV9fYSwgKF9fdjRoaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX202NCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9taW5fcHU4KF9fbTY0IF9fYSwgX19tNjQgX19iKQoreworICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BtaW51YigoX192OHFpKV9fYSwgKF9fdjhxaSlfX2IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZW1hc2tfcGk4KF9fbTY0IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Btb3Ztc2tiKChfX3Y4cWkpX19hKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbXVsaGlfcHUxNihfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wbXVsaHV3KChfX3Y0aGkpX19hLCAoX192NGhpKV9fYik7Cit9CisKKyNkZWZpbmUgX21tX3NodWZmbGVfcGkxNihhLCBuKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTY0KV9fYnVpbHRpbl9pYTMyX3BzaHVmdygoX192NGhpKShfX202NCkoYSksIChuKSk7IH0pCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFza21vdmVfc2k2NChfX202NCBfX2QsIF9fbTY0IF9fbiwgY2hhciAqX19wKQoreworICBfX2J1aWx0aW5faWEzMl9tYXNrbW92cSgoX192OHFpKV9fZCwgKF9fdjhxaSlfX24sIF9fcCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2F2Z19wdTgoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGF2Z2IoKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fYXZnX3B1MTYoX19tNjQgX19hLCBfX202NCBfX2IpCit7CisgIHJldHVybiAoX19tNjQpX19idWlsdGluX2lhMzJfcGF2Z3coKF9fdjRoaSlfX2EsIChfX3Y0aGkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2FkX3B1OChfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9wc2FkYncoKF9fdjhxaSlfX2EsIChfX3Y4cWkpX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2dldGNzcih2b2lkKQoreworICByZXR1cm4gX19idWlsdGluX2lhMzJfc3RteGNzcigpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NldGNzcih1bnNpZ25lZCBpbnQgX19pKQoreworICBfX2J1aWx0aW5faWEzMl9sZG14Y3NyKF9faSk7Cit9CisKKyNkZWZpbmUgX21tX3NodWZmbGVfcHMoYSwgYiwgbWFzaykgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX3NodWZmbGV2ZWN0b3IoKF9fdjRzZikoX19tMTI4KShhKSwgKF9fdjRzZikoX19tMTI4KShiKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXNrKSAmIDB4MywgKChtYXNrKSAmIDB4YykgPj4gMiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKG1hc2spICYgMHgzMCkgPj4gNCkgKyA0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgobWFzaykgJiAweGMwKSA+PiA2KSArIDQpOyB9KQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fdW5wYWNraGlfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCAyLCA2LCAzLCA3KTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX3VucGFja2xvX3BzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgMCwgNCwgMSwgNSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlX3NzKF9fbTEyOCBfX2EsIF9fbTEyOCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcihfX2EsIF9fYiwgNCwgMSwgMiwgMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tb3ZlaGxfcHMoX19tMTI4IF9fYSwgX19tMTI4IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9zaHVmZmxldmVjdG9yKF9fYSwgX19iLCA2LCA3LCAyLCAzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX21vdmVsaF9wcyhfX20xMjggX19hLCBfX20xMjggX19iKQoreworICByZXR1cm4gX19idWlsdGluX3NodWZmbGV2ZWN0b3IoX19hLCBfX2IsIDAsIDEsIDQsIDUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cGkxNl9wcyhfX202NCBfX2EpCit7CisgIF9fbTY0IF9fYiwgX19jOworICBfX20xMjggX19yOworCisgIF9fYiA9IF9tbV9zZXR6ZXJvX3NpNjQoKTsKKyAgX19iID0gX21tX2NtcGd0X3BpMTYoX19iLCBfX2EpOworICBfX2MgPSBfbW1fdW5wYWNraGlfcGkxNihfX2EsIF9fYik7CisgIF9fciA9IF9tbV9zZXR6ZXJvX3BzKCk7CisgIF9fciA9IF9tbV9jdnRwaTMyX3BzKF9fciwgX19jKTsKKyAgX19yID0gX21tX21vdmVsaF9wcyhfX3IsIF9fcik7CisgIF9fYyA9IF9tbV91bnBhY2tsb19waTE2KF9fYSwgX19iKTsKKyAgX19yID0gX21tX2N2dHBpMzJfcHMoX19yLCBfX2MpOworCisgIHJldHVybiBfX3I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwdTE2X3BzKF9fbTY0IF9fYSkKK3sKKyAgX19tNjQgX19iLCBfX2M7CisgIF9fbTEyOCBfX3I7CisKKyAgX19iID0gX21tX3NldHplcm9fc2k2NCgpOworICBfX2MgPSBfbW1fdW5wYWNraGlfcGkxNihfX2EsIF9fYik7CisgIF9fciA9IF9tbV9zZXR6ZXJvX3BzKCk7CisgIF9fciA9IF9tbV9jdnRwaTMyX3BzKF9fciwgX19jKTsKKyAgX19yID0gX21tX21vdmVsaF9wcyhfX3IsIF9fcik7CisgIF9fYyA9IF9tbV91bnBhY2tsb19waTE2KF9fYSwgX19iKTsKKyAgX19yID0gX21tX2N2dHBpMzJfcHMoX19yLCBfX2MpOworCisgIHJldHVybiBfX3I7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwaThfcHMoX19tNjQgX19hKQoreworICBfX202NCBfX2I7CisKKyAgX19iID0gX21tX3NldHplcm9fc2k2NCgpOworICBfX2IgPSBfbW1fY21wZ3RfcGk4KF9fYiwgX19hKTsKKyAgX19iID0gX21tX3VucGFja2xvX3BpOChfX2EsIF9fYik7CisKKyAgcmV0dXJuIF9tbV9jdnRwaTE2X3BzKF9fYik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jdnRwdThfcHMoX19tNjQgX19hKQoreworICBfX202NCBfX2I7CisKKyAgX19iID0gX21tX3NldHplcm9fc2k2NCgpOworICBfX2IgPSBfbW1fdW5wYWNrbG9fcGk4KF9fYSwgX19iKTsKKworICByZXR1cm4gX21tX2N2dHBpMTZfcHMoX19iKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBpMzJ4Ml9wcyhfX202NCBfX2EsIF9fbTY0IF9fYikKK3sKKyAgX19tMTI4IF9fYzsKKworICBfX2MgPSBfbW1fc2V0emVyb19wcygpOworICBfX2MgPSBfbW1fY3Z0cGkzMl9wcyhfX2MsIF9fYik7CisgIF9fYyA9IF9tbV9tb3ZlbGhfcHMoX19jLCBfX2MpOworCisgIHJldHVybiBfbW1fY3Z0cGkzMl9wcyhfX2MsIF9fYSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTY0IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2N2dHBzX3BpMTYoX19tMTI4IF9fYSkKK3sKKyAgX19tNjQgX19iLCBfX2M7CisKKyAgX19iID0gX21tX2N2dHBzX3BpMzIoX19hKTsKKyAgX19hID0gX21tX21vdmVobF9wcyhfX2EsIF9fYSk7CisgIF9fYyA9IF9tbV9jdnRwc19waTMyKF9fYSk7CisKKyAgcmV0dXJuIF9tbV9wYWNrc19waTMyKF9fYiwgX19jKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tNjQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY3Z0cHNfcGk4KF9fbTEyOCBfX2EpCit7CisgIF9fbTY0IF9fYiwgX19jOworCisgIF9fYiA9IF9tbV9jdnRwc19waTE2KF9fYSk7CisgIF9fYyA9IF9tbV9zZXR6ZXJvX3NpNjQoKTsKKworICByZXR1cm4gX21tX3BhY2tzX3BpMTYoX19iLCBfX2MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbW92ZW1hc2tfcHMoX19tMTI4IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX21vdm1za3BzKF9fYSk7Cit9CisKKworI2lmZGVmIF9NU0NfVkVSCisjZGVmaW5lIF9NTV9BTElHTjE2IF9fZGVjbHNwZWMoYWxpZ24oMTYpKQorI2VuZGlmCisKKyNkZWZpbmUgX01NX1NIVUZGTEUoeiwgeSwgeCwgdykgKCgoeikgPDwgNikgfCAoKHkpIDw8IDQpIHwgKCh4KSA8PCAyKSB8ICh3KSkKKworI2RlZmluZSBfTU1fRVhDRVBUX0lOVkFMSUQgICAgKDB4MDAwMSkKKyNkZWZpbmUgX01NX0VYQ0VQVF9ERU5PUk0gICAgICgweDAwMDIpCisjZGVmaW5lIF9NTV9FWENFUFRfRElWX1pFUk8gICAoMHgwMDA0KQorI2RlZmluZSBfTU1fRVhDRVBUX09WRVJGTE9XICAgKDB4MDAwOCkKKyNkZWZpbmUgX01NX0VYQ0VQVF9VTkRFUkZMT1cgICgweDAwMTApCisjZGVmaW5lIF9NTV9FWENFUFRfSU5FWEFDVCAgICAoMHgwMDIwKQorI2RlZmluZSBfTU1fRVhDRVBUX01BU0sgICAgICAgKDB4MDAzZikKKworI2RlZmluZSBfTU1fTUFTS19JTlZBTElEICAgICAgKDB4MDA4MCkKKyNkZWZpbmUgX01NX01BU0tfREVOT1JNICAgICAgICgweDAxMDApCisjZGVmaW5lIF9NTV9NQVNLX0RJVl9aRVJPICAgICAoMHgwMjAwKQorI2RlZmluZSBfTU1fTUFTS19PVkVSRkxPVyAgICAgKDB4MDQwMCkKKyNkZWZpbmUgX01NX01BU0tfVU5ERVJGTE9XICAgICgweDA4MDApCisjZGVmaW5lIF9NTV9NQVNLX0lORVhBQ1QgICAgICAoMHgxMDAwKQorI2RlZmluZSBfTU1fTUFTS19NQVNLICAgICAgICAgKDB4MWY4MCkKKworI2RlZmluZSBfTU1fUk9VTkRfTkVBUkVTVCAgICAgKDB4MDAwMCkKKyNkZWZpbmUgX01NX1JPVU5EX0RPV04gICAgICAgICgweDIwMDApCisjZGVmaW5lIF9NTV9ST1VORF9VUCAgICAgICAgICAoMHg0MDAwKQorI2RlZmluZSBfTU1fUk9VTkRfVE9XQVJEX1pFUk8gKDB4NjAwMCkKKyNkZWZpbmUgX01NX1JPVU5EX01BU0sgICAgICAgICgweDYwMDApCisKKyNkZWZpbmUgX01NX0ZMVVNIX1pFUk9fTUFTSyAgICgweDgwMDApCisjZGVmaW5lIF9NTV9GTFVTSF9aRVJPX09OICAgICAoMHg4MDAwKQorI2RlZmluZSBfTU1fRkxVU0hfWkVST19PRkYgICAgKDB4MDAwMCkKKworI2RlZmluZSBfTU1fR0VUX0VYQ0VQVElPTl9NQVNLKCkgKF9tbV9nZXRjc3IoKSAmIF9NTV9NQVNLX01BU0spCisjZGVmaW5lIF9NTV9HRVRfRVhDRVBUSU9OX1NUQVRFKCkgKF9tbV9nZXRjc3IoKSAmIF9NTV9FWENFUFRfTUFTSykKKyNkZWZpbmUgX01NX0dFVF9GTFVTSF9aRVJPX01PREUoKSAoX21tX2dldGNzcigpICYgX01NX0ZMVVNIX1pFUk9fTUFTSykKKyNkZWZpbmUgX01NX0dFVF9ST1VORElOR19NT0RFKCkgKF9tbV9nZXRjc3IoKSAmIF9NTV9ST1VORF9NQVNLKQorCisjZGVmaW5lIF9NTV9TRVRfRVhDRVBUSU9OX01BU0soeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fTUFTS19NQVNLKSB8ICh4KSkpCisjZGVmaW5lIF9NTV9TRVRfRVhDRVBUSU9OX1NUQVRFKHgpIChfbW1fc2V0Y3NyKChfbW1fZ2V0Y3NyKCkgJiB+X01NX0VYQ0VQVF9NQVNLKSB8ICh4KSkpCisjZGVmaW5lIF9NTV9TRVRfRkxVU0hfWkVST19NT0RFKHgpIChfbW1fc2V0Y3NyKChfbW1fZ2V0Y3NyKCkgJiB+X01NX0ZMVVNIX1pFUk9fTUFTSykgfCAoeCkpKQorI2RlZmluZSBfTU1fU0VUX1JPVU5ESU5HX01PREUoeCkgKF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1fUk9VTkRfTUFTSykgfCAoeCkpKQorCisjZGVmaW5lIF9NTV9UUkFOU1BPU0U0X1BTKHJvdzAsIHJvdzEsIHJvdzIsIHJvdzMpIFwKK2RvIHsgXAorICBfX20xMjggdG1wMywgdG1wMiwgdG1wMSwgdG1wMDsgXAorICB0bXAwID0gX21tX3VucGFja2xvX3BzKChyb3cwKSwgKHJvdzEpKTsgXAorICB0bXAyID0gX21tX3VucGFja2xvX3BzKChyb3cyKSwgKHJvdzMpKTsgXAorICB0bXAxID0gX21tX3VucGFja2hpX3BzKChyb3cwKSwgKHJvdzEpKTsgXAorICB0bXAzID0gX21tX3VucGFja2hpX3BzKChyb3cyKSwgKHJvdzMpKTsgXAorICAocm93MCkgPSBfbW1fbW92ZWxoX3BzKHRtcDAsIHRtcDIpOyBcCisgIChyb3cxKSA9IF9tbV9tb3ZlaGxfcHModG1wMiwgdG1wMCk7IFwKKyAgKHJvdzIpID0gX21tX21vdmVsaF9wcyh0bXAxLCB0bXAzKTsgXAorICAocm93MykgPSBfbW1fbW92ZWhsX3BzKHRtcDMsIHRtcDEpOyBcCit9IHdoaWxlICgwKQorCisvKiBBbGlhc2VzIGZvciBjb21wYXRpYmlsaXR5LiAqLworI2RlZmluZSBfbV9wZXh0cncgX21tX2V4dHJhY3RfcGkxNgorI2RlZmluZSBfbV9waW5zcncgX21tX2luc2VydF9waTE2CisjZGVmaW5lIF9tX3BtYXhzdyBfbW1fbWF4X3BpMTYKKyNkZWZpbmUgX21fcG1heHViIF9tbV9tYXhfcHU4CisjZGVmaW5lIF9tX3BtaW5zdyBfbW1fbWluX3BpMTYKKyNkZWZpbmUgX21fcG1pbnViIF9tbV9taW5fcHU4CisjZGVmaW5lIF9tX3Btb3Ztc2tiIF9tbV9tb3ZlbWFza19waTgKKyNkZWZpbmUgX21fcG11bGh1dyBfbW1fbXVsaGlfcHUxNgorI2RlZmluZSBfbV9wc2h1ZncgX21tX3NodWZmbGVfcGkxNgorI2RlZmluZSBfbV9tYXNrbW92cSBfbW1fbWFza21vdmVfc2k2NAorI2RlZmluZSBfbV9wYXZnYiBfbW1fYXZnX3B1OAorI2RlZmluZSBfbV9wYXZndyBfbW1fYXZnX3B1MTYKKyNkZWZpbmUgX21fcHNhZGJ3IF9tbV9zYWRfcHU4CisjZGVmaW5lIF9tXyBfbW1fCisjZGVmaW5lIF9tXyBfbW1fCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworLyogVWdseSBoYWNrIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSAoY29tcGF0aWJsZSB3aXRoIGdjYykgKi8KKyNpZiBkZWZpbmVkKF9fU1NFMl9fKSAmJiAhX19oYXNfZmVhdHVyZShtb2R1bGVzKQorI2luY2x1ZGUgPGVtbWludHJpbi5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1hNTUlOVFJJTl9IICovCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hvcGludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94b3BpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDdmNTFjCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94b3BpbnRyaW4uaApAQCAtMCwwICsxLDc4MiBAQAorLyo9PT0tLS0tIHhvcGludHJpbi5oIC0gWE9QIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX1g4NklOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8eG9waW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDx4ODZpbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1hPUElOVFJJTl9ICisjZGVmaW5lIF9fWE9QSU5UUklOX0gKKworI2luY2x1ZGUgPGZtYTRpbnRyaW4uaD4KKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCBfX3RhcmdldF9fKCJ4b3AiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY3NfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3N3dygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y4aGkpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3N3dygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y4aGkpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjc2RfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3N3ZCgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IsIChfX3Y0c2kpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjZF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzd2QoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192NHNpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY3NfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3NkZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IsIChfX3Y0c2kpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NkZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IsIChfX3Y0c2kpX19DKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9tYWNjc2xvX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NzZHFsKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQiwgKF9fdjJkaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2Nsb19lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBtYWNzZHFsKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQiwgKF9fdjJkaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hY2NzaGlfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBfX20xMjhpIF9fQykKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwbWFjc3NkcWgoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CLCAoX192MmRpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFjY2hpX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hY3NkcWgoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CLCAoX192MmRpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fbWFkZHNkX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hZGNzc3dkKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQiwgKF9fdjRzaSlfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX21hZGRkX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cG1hZGNzd2QoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CLCAoX192NHNpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHdfZXBpOChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJ3KChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZGRfZXBpOChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJkKChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHFfZXBpOChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJxKChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZGRfZXBpMTYoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR3ZCgoX192OGhpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHFfZXBpMTYoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR3cSgoX192OGhpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHFfZXBpMzIoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGRkcSgoX192NHNpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZHdfZXB1OChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZHVidygoX192MTZxaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRkX2VwdTgoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR1YmQoKF9fdjE2cWkpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkcV9lcHU4KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkdWJxKChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faGFkZGRfZXB1MTYoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhhZGR1d2QoKF9fdjhoaSlfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2hhZGRxX2VwdTE2KF9fbTEyOGkgX19BKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBoYWRkdXdxKChfX3Y4aGkpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9oYWRkcV9lcHUzMihfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaGFkZHVkcSgoX192NHNpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1YndfZXBpOChfX20xMjhpIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwaHN1YmJ3KChfX3YxNnFpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1YmRfZXBpMTYoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhzdWJ3ZCgoX192OGhpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1faHN1YnFfZXBpMzIoX19tMTI4aSBfX0EpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGhzdWJkcSgoX192NHNpKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY21vdl9zaTEyOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IsIF9fbTEyOGkgX19DKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjbW92KF9fQSwgX19CLCBfX0MpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZpIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2Ntb3Zfc2kyNTYoX19tMjU2aSBfX0EsIF9fbTI1NmkgX19CLCBfX20yNTZpIF9fQykKK3sKKyAgcmV0dXJuIChfX20yNTZpKV9fYnVpbHRpbl9pYTMyX3ZwY21vdl8yNTYoX19BLCBfX0IsIF9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcGVybV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQiwgX19tMTI4aSBfX0MpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHBlcm0oKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IsIChfX3YxNnFpKV9fQyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcm90X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RiKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9yb3RfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3R3KChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fcm90X2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwcm90ZCgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3JvdF9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHJvdHEoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKK30KKworI2RlZmluZSBfbW1fcm90aV9lcGk4KEEsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHJvdGJpKChfX3YxNnFpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fcm90aV9lcGkxNihBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3R3aSgoX192OGhpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fcm90aV9lcGkzMihBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RkaSgoX192NHNpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fcm90aV9lcGk2NChBLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnByb3RxaSgoX192MmRpKShfX20xMjhpKShBKSwgKE4pKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGxfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNobGIoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NobF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNobHcoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGxfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGxkKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hsX2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hscSgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hhYigoX192MTZxaSlfX0EsIChfX3YxNnFpKV9fQik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fc2hhX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Zwc2hhdygoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX3NoYV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cHNoYWQoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9zaGFfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBzaGFxKChfX3YyZGkpX19BLCAoX192MmRpKV9fQik7Cit9CisKKyNkZWZpbmUgX21tX2NvbV9lcHU4KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXViKChfX3YxNnFpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fY29tX2VwdTE2KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXV3KChfX3Y4aGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjhoaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX2NvbV9lcHUzMihBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb211ZCgoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y0c2kpKF9fbTEyOGkpKEIpLCAoTikpOyB9KQorCisjZGVmaW5lIF9tbV9jb21fZXB1NjQoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tdXEoKF9fdjJkaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fY29tX2VwaTgoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tYigoX192MTZxaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YxNnFpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfbW1fY29tX2VwaTE2KEEsIEIsIE4pIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl92cGNvbXcoKF9fdjhoaSkoX19tMTI4aSkoQSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3Y4aGkpKF9fbTEyOGkpKEIpLCAoTikpOyB9KQorCisjZGVmaW5lIF9tbV9jb21fZXBpMzIoQSwgQiwgTikgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3ZwY29tZCgoX192NHNpKShfX20xMjhpKShBKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRzaSkoX19tMTI4aSkoQiksIChOKSk7IH0pCisKKyNkZWZpbmUgX21tX2NvbV9lcGk2NChBLCBCLCBOKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGkpX19idWlsdGluX2lhMzJfdnBjb21xKChfX3YyZGkpKF9fbTEyOGkpKEEpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192MmRpKShfX20xMjhpKShCKSwgKE4pKTsgfSkKKworI2RlZmluZSBfTU1fUENPTUNUUkxfTFQgICAgMAorI2RlZmluZSBfTU1fUENPTUNUUkxfTEUgICAgMQorI2RlZmluZSBfTU1fUENPTUNUUkxfR1QgICAgMgorI2RlZmluZSBfTU1fUENPTUNUUkxfR0UgICAgMworI2RlZmluZSBfTU1fUENPTUNUUkxfRVEgICAgNAorI2RlZmluZSBfTU1fUENPTUNUUkxfTkVRICAgNQorI2RlZmluZSBfTU1fUENPTUNUUkxfRkFMU0UgNgorI2RlZmluZSBfTU1fUENPTUNUUkxfVFJVRSAgNworCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwdTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXB1OChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcHU4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1OChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbGVfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21ndF9lcHUxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZXFfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21uZXFfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXB1MTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0ZBTFNFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb210cnVlX2VwdTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sdF9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ3RfZXB1MzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHUzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21nZV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbmVxX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWZhbHNlX2VwdTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1MzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcHUzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfVFJVRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbHRfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sZV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwdTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXB1NjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ2VfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21lcV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTkVRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21mYWxzZV9lcHU2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwdTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbXRydWVfZXB1NjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcHU2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwaTgoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk4KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXBpOChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTgoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcGk4KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpOChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWx0X2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbGVfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21ndF9lcGkxNihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTE2KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR1QpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWdlX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZXFfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0VRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21uZXFfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX05FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZmFsc2VfZXBpMTYoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkxNihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0ZBTFNFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb210cnVlX2VwaTE2KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMTYoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9UUlVFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sdF9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTFQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWxlX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9MRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ3RfZXBpMzIoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGkzMihfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21nZV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfR0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWVxX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9FUSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbmVxX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9ORVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWZhbHNlX2VwaTMyKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpMzIoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9GQUxTRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tdHJ1ZV9lcGkzMihfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTMyKF9fQSwgX19CLCBfTU1fUENPTUNUUkxfVFJVRSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tbHRfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0xUKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21sZV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTEUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbWd0X2VwaTY0KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKK3sKKyAgcmV0dXJuIF9tbV9jb21fZXBpNjQoX19BLCBfX0IsIF9NTV9QQ09NQ1RSTF9HVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGkgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fY29tZ2VfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX0dFKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21lcV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRVEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbW5lcV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfTkVRKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4aSBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9jb21mYWxzZV9lcGk2NChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCit7CisgIHJldHVybiBfbW1fY29tX2VwaTY0KF9fQSwgX19CLCBfTU1fUENPTUNUUkxfRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjhpIF9fREVGQVVMVF9GTl9BVFRSUworX21tX2NvbXRydWVfZXBpNjQoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQoreworICByZXR1cm4gX21tX2NvbV9lcGk2NChfX0EsIF9fQiwgX01NX1BDT01DVFJMX1RSVUUpOworfQorCisjZGVmaW5lIF9tbV9wZXJtdXRlMl9wZChYLCBZLCBDLCBJKSBfX2V4dGVuc2lvbl9fICh7IFwKKyAgKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwZCgoX192MmRmKShfX20xMjhkKShYKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3YyZGYpKF9fbTEyOGQpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjJkaSkoX19tMTI4aSkoQyksIChJKSk7IH0pCisKKyNkZWZpbmUgX21tMjU2X3Blcm11dGUyX3BkKFgsIFksIEMsIEkpIF9fZXh0ZW5zaW9uX18gKHsgXAorICAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92cGVybWlsMnBkMjU2KChfX3Y0ZGYpKF9fbTI1NmQpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdjRkZikoX19tMjU2ZCkoWSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NGRpKShfX20yNTZpKShDKSwgKEkpKTsgfSkKKworI2RlZmluZSBfbW1fcGVybXV0ZTJfcHMoWCwgWSwgQywgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20xMjgpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwcygoX192NHNmKShfX20xMjgpKFgpLCAoX192NHNmKShfX20xMjgpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192NHNpKShfX20xMjhpKShDKSwgKEkpKTsgfSkKKworI2RlZmluZSBfbW0yNTZfcGVybXV0ZTJfcHMoWCwgWSwgQywgSSkgX19leHRlbnNpb25fXyAoeyBcCisgIChfX20yNTYpX19idWlsdGluX2lhMzJfdnBlcm1pbDJwczI1NigoX192OHNmKShfX20yNTYpKFgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNmKShfX20yNTYpKFkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192OHNpKShfX20yNTZpKShDKSwgKEkpKTsgfSkKKworc3RhdGljIF9faW5saW5lX18gX19tMTI4IF9fREVGQVVMVF9GTl9BVFRSUworX21tX2ZyY3pfc3MoX19tMTI4IF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfdmZyY3pzcygoX192NHNmKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTEyOGQgX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZnJjel9zZChfX20xMjhkIF9fQSkKK3sKKyAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX3ZmcmN6c2QoKF9fdjJkZilfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20xMjggX19ERUZBVUxUX0ZOX0FUVFJTCitfbW1fZnJjel9wcyhfX20xMjggX19BKQoreworICByZXR1cm4gKF9fbTEyOClfX2J1aWx0aW5faWEzMl92ZnJjenBzKChfX3Y0c2YpX19BKTsKK30KKworc3RhdGljIF9faW5saW5lX18gX19tMTI4ZCBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbV9mcmN6X3BkKF9fbTEyOGQgX19BKQoreworICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdmZyY3pwZCgoX192MmRmKV9fQSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fbTI1NiBfX0RFRkFVTFRfRk5fQVRUUlMKK19tbTI1Nl9mcmN6X3BzKF9fbTI1NiBfX0EpCit7CisgIHJldHVybiAoX19tMjU2KV9fYnVpbHRpbl9pYTMyX3ZmcmN6cHMyNTYoKF9fdjhzZilfX0EpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBfX20yNTZkIF9fREVGQVVMVF9GTl9BVFRSUworX21tMjU2X2ZyY3pfcGQoX19tMjU2ZCBfX0EpCit7CisgIHJldHVybiAoX19tMjU2ZClfX2J1aWx0aW5faWEzMl92ZnJjenBkMjU2KChfX3Y0ZGYpX19BKTsKK30KKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYgLyogX19YT1BJTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZWNpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVjaW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4NDcwYQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVjaW50cmluLmgKQEAgLTAsMCArMSw0OCBAQAorLyo9PT0tLS0tIHhzYXZlY2ludHJpbi5oIC0gWFNBVkVDIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHhzYXZlY2ludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19YU0FWRUNJTlRSSU5fSAorI2RlZmluZSBfX1hTQVZFQ0lOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oInhzYXZlYyIpKSkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194c2F2ZWModm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX3hzYXZlYyhfX3AsIF9fbSk7Cit9CisKKyNpZmRlZiBfX3g4Nl82NF9fCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hzYXZlYzY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICBfX2J1aWx0aW5faWEzMl94c2F2ZWM2NChfX3AsIF9fbSk7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVpbnRyaW4uaCBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVpbnRyaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU2YjJlCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94c2F2ZWludHJpbi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qPT09LS0tLSB4c2F2ZWludHJpbi5oIC0gWFNBVkUgaW50cmluc2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqCisgKj09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworI2lmbmRlZiBfX0lNTUlOVFJJTl9ICisjZXJyb3IgIk5ldmVyIHVzZSA8eHNhdmVpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fWFNBVkVJTlRSSU5fSAorI2RlZmluZSBfX1hTQVZFSU5UUklOX0gKKworLyogRGVmaW5lIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlLiAqLworI2RlZmluZSBfX0RFRkFVTFRfRk5fQVRUUlMgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fbm9kZWJ1Z19fLCAgX190YXJnZXRfXygieHNhdmUiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmUodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIHJldHVybiBfX2J1aWx0aW5faWEzMl94c2F2ZShfX3AsIF9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHJzdG9yKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHJzdG9yKF9fcCwgX19tKTsKK30KKworI2lmZGVmIF9feDg2XzY0X18KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmU2NCh2b2lkICpfX3AsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX20pIHsKKyAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hzYXZlNjQoX19wLCBfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hyc3RvcjY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHJzdG9yNjQoX19wLCBfX20pOworfQorI2VuZGlmCisKKyN1bmRlZiBfX0RFRkFVTFRfRk5fQVRUUlMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlb3B0aW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlb3B0aW50cmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmYWFlNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVvcHRpbnRyaW4uaApAQCAtMCwwICsxLDQ4IEBACisvKj09PS0tLS0geHNhdmVvcHRpbnRyaW4uaCAtIFhTQVZFT1BUIGludHJpbnNpYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUuCisgKgorICo9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICovCisKKyNpZm5kZWYgX19JTU1JTlRSSU5fSAorI2Vycm9yICJOZXZlciB1c2UgPHhzYXZlb3B0aW50cmluLmg+IGRpcmVjdGx5OyBpbmNsdWRlIDxpbW1pbnRyaW4uaD4gaW5zdGVhZC4iCisjZW5kaWYKKworI2lmbmRlZiBfX1hTQVZFT1BUSU5UUklOX0gKKyNkZWZpbmUgX19YU0FWRU9QVElOVFJJTl9ICisKKy8qIERlZmluZSB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4gKi8KKyNkZWZpbmUgX19ERUZBVUxUX0ZOX0FUVFJTIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX25vZGVidWdfXywgIF9fdGFyZ2V0X18oInhzYXZlb3B0IikpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hzYXZlb3B0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHNhdmVvcHQoX19wLCBfX20pOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194c2F2ZW9wdDY0KHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHNhdmVvcHQ2NChfX3AsIF9fbSk7Cit9CisjZW5kaWYKKworI3VuZGVmIF9fREVGQVVMVF9GTl9BVFRSUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2luY2x1ZGUveHNhdmVzaW50cmluLmggYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlc2ludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZTU0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3hzYXZlc2ludHJpbi5oCkBAIC0wLDAgKzEsNTggQEAKKy8qPT09LS0tLSB4c2F2ZXNpbnRyaW4uaCAtIFhTQVZFUyBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDx4c2F2ZXNpbnRyaW4uaD4gZGlyZWN0bHk7IGluY2x1ZGUgPGltbWludHJpbi5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIF9fWFNBVkVTSU5UUklOX0gKKyNkZWZpbmUgX19YU0FWRVNJTlRSSU5fSAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9fREVGQVVMVF9GTl9BVFRSUyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sICBfX3RhcmdldF9fKCJ4c2F2ZXMiKSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmVzKHZvaWQgKl9fcCwgdW5zaWduZWQgbG9uZyBsb25nIF9fbSkgeworICBfX2J1aWx0aW5faWEzMl94c2F2ZXMoX19wLCBfX20pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fREVGQVVMVF9GTl9BVFRSUworX3hyc3RvcnModm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX3hyc3RvcnMoX19wLCBfX20pOworfQorCisjaWZkZWYgX194ODZfNjRfXworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0RFRkFVTFRfRk5fQVRUUlMKK194cnN0b3JzNjQodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX3hyc3RvcnM2NChfX3AsIF9fbSk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19ERUZBVUxUX0ZOX0FUVFJTCitfeHNhdmVzNjQodm9pZCAqX19wLCB1bnNpZ25lZCBsb25nIGxvbmcgX19tKSB7CisgIF9fYnVpbHRpbl9pYTMyX3hzYXZlczY0KF9fcCwgX19tKTsKK30KKyNlbmRpZgorCisjdW5kZWYgX19ERUZBVUxUX0ZOX0FUVFJTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94dGVzdGludHJpbi5oIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvaW5jbHVkZS94dGVzdGludHJpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzM3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9pbmNsdWRlL3h0ZXN0aW50cmluLmgKQEAgLTAsMCArMSw0MSBAQAorLyo9PT0tLS0tIHh0ZXN0aW50cmluLmggLSBYVEVTVCBpbnRyaW5zaWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICoKKyAqPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisjaWZuZGVmIF9fSU1NSU5UUklOX0gKKyNlcnJvciAiTmV2ZXIgdXNlIDx4dGVzdGludHJpbi5oPiBkaXJlY3RseTsgaW5jbHVkZSA8aW1taW50cmluLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgX19YVEVTVElOVFJJTl9ICisjZGVmaW5lIF9fWFRFU1RJTlRSSU5fSAorCisvKiB4dGVzdCByZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCB3aXRoaW4gYW4gUlRNIG9yIGFjdGl2ZQorICogSExFIHJlZ2lvbi4gKi8KKy8qIEZJWE1FOiBUaGlzIGNhbiBiZSBhbiBlaXRoZXIgb3IgZm9yIFJUTS9ITEUuIERlYWwgd2l0aCB0aGlzIHdoZW4gSExFIGlzCisgKiBzdXBwb3J0ZWQuICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19ub2RlYnVnX18sIF9fdGFyZ2V0X18oInJ0bSIpKSkKKyAgICBfeHRlc3Qodm9pZCkgeworICByZXR1cm4gX19idWlsdGluX2lhMzJfeHRlc3QoKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hYXJjaDY0LWFuZHJvaWQuc28gYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hYXJjaDY0LWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzkxOWU4NwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWFhcmNoNjQtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hcm0tYW5kcm9pZC5zbyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWFybS1hbmRyb2lkLnNvCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkNDllYjkKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1hcm0tYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1pNjg2LWFuZHJvaWQuc28gYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQuYXNhbi1pNjg2LWFuZHJvaWQuc28KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjU5MmMyNgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5hc2FuLWk2ODYtYW5kcm9pZC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hYXJjaDY0LWFuZHJvaWQuYSBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLWFhcmNoNjQtYW5kcm9pZC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYzU3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hYXJjaDY0LWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1hcm0tYW5kcm9pZC5hIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYXJtLWFuZHJvaWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTJiYjcyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtYXJtLWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LWFuZHJvaWQuYSBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLWk2ODYtYW5kcm9pZC5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkM2JkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1pNjg2LWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzNjRlbC1hbmRyb2lkLmEgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzNjRlbC1hbmRyb2lkLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiNTlhMAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvY2xhbmcvMy44L2xpYi9saW51eC9saWJjbGFuZ19ydC5wcm9maWxlLW1pcHM2NGVsLWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS1taXBzZWwtYW5kcm9pZC5hIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtbWlwc2VsLWFuZHJvaWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzY0YTM0Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUtbWlwc2VsLWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2NsYW5nLzMuOC9saWIvbGludXgvbGliY2xhbmdfcnQucHJvZmlsZS14ODZfNjQtYW5kcm9pZC5hIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUteDg2XzY0LWFuZHJvaWQuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTAxMDc0Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS9saWI2NC9jbGFuZy8zLjgvbGliL2xpbnV4L2xpYmNsYW5nX3J0LnByb2ZpbGUteDg2XzY0LWFuZHJvaWQuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2xpYkxMVk0uZHlsaWIgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2xpYkxMVk0uZHlsaWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjAwOWVkOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvbGliNjQvbGliTExWTS5keWxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L2xpYjY0L2xpYmMrKy5keWxpYiBiL2NsYW5nLTI2OTAzODUvbGliNjQvbGliYysrLmR5bGliCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0OWQ4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L2xpYjY0L2xpYmMrKy5keWxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L3JlcG8ucHJvcCBiL2NsYW5nLTI2OTAzODUvcmVwby5wcm9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZWQ2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3JlcG8ucHJvcApAQCAtMCwwICsxLDQwIEBACitwbGF0Zm9ybS9iaW9uaWMgZDA1N2Y0NDlhMGEzYWQyZjU3NGQxMWZmY2UwNjBkNjlkYjlmYzAxOQorcGxhdGZvcm0vYnVpbGQgOWQ1ZmIxNGIyZDU1MWU1MjJjNTFmNzgzNjFiNzc2NTMxOTFjOGM5MQorcGxhdGZvcm0vYnVpbGQvYmx1ZXByaW50IDNhODlkMWNlOWZlN2E1MTYwZWU4N2VlMTFmOTllZGJmNTQwMDIwZmMKK3BsYXRmb3JtL2J1aWxkL2thdGkgMTU4ODY3ODQ5YzhhNTVkMWRiOTVlYWQ3Y2JlY2E0YWFjZDQ3MzUwZgorcGxhdGZvcm0vYnVpbGQvc29vbmcgZGM1ZDI4YWQxNzM2ZDMxNzg3ZGE5MTA2MjdhMzcxMWM0ZGYyYTU4OAorcGxhdGZvcm0vZXh0ZXJuYWwvY2xhbmcgZDI2YWY3YzM3ZjJmMzBhYzMyZjNjNTY4YmZmMTg2Njc4ODUwNjM0YQorcGxhdGZvcm0vZXh0ZXJuYWwvY29tcGlsZXItcnQgNzcyM2U0ZGY5NWE0ODdjMmE4YTMzZDg1MDMxODg3N2M0ZWZhY2Y3ZAorcGxhdGZvcm0vZXh0ZXJuYWwvamVtYWxsb2MgZWMwMDZkODg0ZDVkMjE5YTA3MGZlYzhkZjU2YTIzM2VkNTI0ZmY5NAorcGxhdGZvcm0vZXh0ZXJuYWwvbGliY3h4IGZmMTYyZjA3OWVhZDI5OTU5NTZmNmM5NTk0ZmUyNGZjNzcyZGY4YTkKK3BsYXRmb3JtL2V4dGVybmFsL2xpYmN4eGFiaSBmYjExY2IzMWVhMjE0Mzg2YTY4MWQyZjI4YjEyNmIzMTBhYzUzNjU3CitwbGF0Zm9ybS9leHRlcm5hbC9saWJ1bndpbmQgYTVhYjdkYThhZWVkNDk4NjA0OTNmZWY4YTYxZDRmZmU5MTQxYzNhNworcGxhdGZvcm0vZXh0ZXJuYWwvbGlidW53aW5kX2xsdm0gN2RhYTAxOGUyMzQwMGM4MGM4Y2RlODM0MjA3ZmUxNGYwMzZiMmJmNworcGxhdGZvcm0vZXh0ZXJuYWwvbGx2bSAwYjllNTQ0NWNhNjhkMzA1MDcyMTg4ZTIwZjZjMWVlZjIyYjA2MjBlCitwbGF0Zm9ybS9tYW5pZmVzdCA3YTM3ZGQ4MTBmMzQxZDk1M2IwMDdkNDQyMmRhMzdlMGJhZmI5NWYzCitwbGF0Zm9ybS9wcmVidWlsdHMvY2xhbmcvaG9zdC9kYXJ3aW4teDg2IDk1YjE4NWFmNjcwOTYzMWIxZDJjNmUzMTkzYjU3MTMzYTQ0NjNiOTkKK3BsYXRmb3JtL3ByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4NiA4MTJhNmI1ZDc3MmNhYjc4NzYxZDMzNWYzYzdmNTg3NjQ2MWUzYjNiCitwbGF0Zm9ybS9wcmVidWlsdHMvY2xhbmcvaG9zdC93aW5kb3dzLXg4NiAyOTVmMDFiZjcwM2ZmMGQ2NWE3YWE1OGI4MDMwZGJhYmI4YWNkMmVkCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45IGU1ZGQ2ZDM3NGE0ZWMyNmQ5ZmVjMDY3M2RjM2UxMmM5NmNkNDk5NWMKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hcm0vYXJtLWVhYmktNC44IDZkMDhjYTlmNDVmZjY4NTY0OGZkMTNjNzViZjVjYWM0YjExYzE5YmIKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hcm0vYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOSAzMzQyZDJkMzczZmQ0YjhlNmUxODM4YTU3ZjU1ZTA2NGI2ODNkNDdjCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvaG9zdC9oZWFkZXJzIDRhYzRmN2NjNDFjZjNjOWUzNmZjM2Q2Y2YzN2ZkMWNmYTk1ODdhNjgKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9ob3N0L2k2ODYtYXBwbGUtZGFyd2luLTQuMi4xIGVjNWFhNjZhYWE0OTY0YzI3NTY0ZDBlYzg0ZGMxZjE4YTJkNzJiN2UKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9taXBzL21pcHM2NGVsLWxpbnV4LWFuZHJvaWQtNC45IDQ5ZTZiMDkxNjM1OWEyNmZmZTRhNWVjYjhkNTBlYTJkNjI5MGY0ZmEKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni94ODYveDg2XzY0LWxpbnV4LWFuZHJvaWQtNC45IDFmZTlhMTNiZTgxNzdmM2Q4YzE1ZjM5ZWRmMTQ2YWZiZTAyODk1MDcKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FhcmNoNjQvYWFyY2g2NC1saW51eC1hbmRyb2lkLTQuOSA1MmMwMWM0YTYyZmQ4OTFmNGM1MTdlZjlkMDk3ODMzNjM5ZmRlYTEyCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9hcm0vYXJtLWVhYmktNC44IDI2ZTkzZjZhZjQ3ZjdiZDNhOWJlYjVjMTAyYTVmNDVlMTliZmEzOGEKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FybS9hcm0tbGludXgtYW5kcm9pZGVhYmktNC45IGMwOWUxYjNhNTUxNTNkMWJhMTQyZDViZjU0OGM5MDQ4N2VhNzFmOWUKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LWxpbnV4LWdsaWJjMi4xMS00LjggMTI3MzQzMWExODk3MTc4NDJmMDMzNTczZWI4Yzc3N2UxM2RkODhiNworcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjE1LTQuOCA3M2NhOTkxOTY3MjNmODEwZGFkNDIzOTBkMTU0NjU0MzU0ZjU3YzE2CitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC13NjQtbWluZ3czMi00LjggYzc5NWVlZDc0M2JjNmNlZTRlYWQ1NDA3Y2MyMzdjNDNhYmY2ZmEyNgorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvbWlwcy9taXBzNjRlbC1saW51eC1hbmRyb2lkLTQuOSA0MjViMGRiMjllNGFmNzZhZDJjYzA5OTMwNGQ4MjA5NTU4YmUxNDJmCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni94ODYveDg2XzY0LWxpbnV4LWFuZHJvaWQtNC45IGMzMzUxM2Y5ZGU5NWZjZGY0ZWM4MzJkYjVlM2ViZDYxMjM4MmY1NDEKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nby9kYXJ3aW4teDg2IDA5ZWIzYjE1OWFjZjY3ODNlYjU1NGY3NjdkMGQ4YTEzN2QwYzQxZDkKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nby9saW51eC14ODYgNmZmMjMyNTNmODI4M2QwYzgxYzlkYjUxYzJkNzgwM2UwODZjOTNhZAorcGxhdGZvcm0vcHJlYnVpbHRzL25kayBlOTlhYzQ4YmE0ZWQ1ZmZiYzhjZDIwYzdhMzIwYzJiYWEwMmYxY2Q3CitwbGF0Zm9ybS9wcmVidWlsdHMvbmluamEvZGFyd2luLXg4NiA3Y2E5MjYyYjA2YmE5OWJhMjI3MGUwOTI4ZGJhODdjMWViOGQ4Y2E3CitwbGF0Zm9ybS9wcmVidWlsdHMvbmluamEvbGludXgteDg2IDBiNTE0YzNhMWRjMThkMWM5ZWQ1OTk3MmViYTNiNjVhZjRhNzJlMzcKK3BsYXRmb3JtL3ByZWJ1aWx0cy9zZGsgYjU4ZTE4NTVmZWI2NjQwZTAwYzFlYmExY2E1YjkwZDFmOTRmZjBkYworcGxhdGZvcm0vc3lzdGVtL2NvcmUgMzcxZTdlYTE3MGQ3NDk0ODlhMGViNzA4NTM0N2Y1OGI3YmU2MzczNAordG9vbGNoYWluL2JpbnV0aWxzIDA2NjYwNzM4ODk0NWY1NDI3MjdiZDUwMzVmYjhkODRiZmQ3OTgwMzQKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9DTWFrZUxpc3RzLnR4dCBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGMyNDNkCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsODIgQEAKK29wdGlvbihDTEFOR19JTlNUQUxMX1NDQU5CVUlMRCAiSW5zdGFsbCB0aGUgc2Nhbi1idWlsZCB0b29sIiBPTikKKworaW5jbHVkZShHTlVJbnN0YWxsRGlycykKKworaWYgKFdJTjMyIEFORCBOT1QgQ1lHV0lOKQorICBzZXQoQmluRmlsZXMKKyAgICAgICAgc2Nhbi1idWlsZC5iYXQpCisgIHNldChMaWJleGVjRmlsZXMKKyAgICAgICAgY2NjLWFuYWx5emVyLmJhdAorICAgICAgICBjKystYW5hbHl6ZXIuYmF0KQorZWxzZSgpCisgIHNldChCaW5GaWxlcworICAgICAgICBzY2FuLWJ1aWxkKQorICBzZXQoTGliZXhlY0ZpbGVzCisgICAgICAgIGNjYy1hbmFseXplcgorICAgICAgICBjKystYW5hbHl6ZXIpCisgIGlmIChBUFBMRSkKKyAgICBsaXN0KEFQUEVORCBCaW5GaWxlcworICAgICAgICAgICBzZXQteGNvZGUtYW5hbHl6ZXIpCisgIGVuZGlmKCkKK2VuZGlmKCkKKworc2V0KE1hblBhZ2VzCisgICAgICBzY2FuLWJ1aWxkLjEpCisKK3NldChTaGFyZUZpbGVzCisgICAgICBzY2Fudmlldy5jc3MKKyAgICAgIHNvcnR0YWJsZS5qcykKKworCitpZihDTEFOR19JTlNUQUxMX1NDQU5CVUlMRCkKKyAgZm9yZWFjaChCaW5GaWxlICR7QmluRmlsZXN9KQorICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vJHtCaW5GaWxlfQorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgbWFrZV9kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2JpbgorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9iaW4vJHtCaW5GaWxlfQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vYmluLworICAgICAgICAgICAgICAgICAgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9iaW4vJHtCaW5GaWxlfSkKKyAgICBsaXN0KEFQUEVORCBEZXBlbmRzICR7Q01BS0VfQklOQVJZX0RJUn0vYmluLyR7QmluRmlsZX0pCisgICAgaW5zdGFsbChQUk9HUkFNUyBiaW4vJHtCaW5GaWxlfSBERVNUSU5BVElPTiBiaW4pCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goTGliZXhlY0ZpbGUgJHtMaWJleGVjRmlsZXN9KQorICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9saWJleGVjLyR7TGliZXhlY0ZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBtYWtlX2RpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vbGliZXhlYworICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9saWJleGVjLyR7TGliZXhlY0ZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9saWJleGVjLworICAgICAgICAgICAgICAgICAgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9saWJleGVjLyR7TGliZXhlY0ZpbGV9KQorICAgIGxpc3QoQVBQRU5EIERlcGVuZHMgJHtDTUFLRV9CSU5BUllfRElSfS9saWJleGVjLyR7TGliZXhlY0ZpbGV9KQorICAgIGluc3RhbGwoUFJPR1JBTVMgbGliZXhlYy8ke0xpYmV4ZWNGaWxlfSBERVNUSU5BVElPTiBsaWJleGVjKQorICBlbmRmb3JlYWNoKCkKKworICBmb3JlYWNoKE1hblBhZ2UgJHtNYW5QYWdlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9LyR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEvJHtNYW5QYWdlfQorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgbWFrZV9kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9LyR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEKKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vbWFuLyR7TWFuUGFnZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9LyR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjEvCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L21hbi8ke01hblBhZ2V9KQorICAgIGxpc3QoQVBQRU5EIERlcGVuZHMgJHtDTUFLRV9CSU5BUllfRElSfS8ke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4xLyR7TWFuUGFnZX0pCisgICAgaW5zdGFsbChQUk9HUkFNUyBtYW4vJHtNYW5QYWdlfSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4xKQorICBlbmRmb3JlYWNoKCkKKworICBmb3JlYWNoKFNoYXJlRmlsZSAke1NoYXJlRmlsZXN9KQorICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLWJ1aWxkLyR7U2hhcmVGaWxlfQorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgbWFrZV9kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2hhcmUvc2Nhbi1idWlsZC8ke1NoYXJlRmlsZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQvCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NoYXJlL3NjYW4tYnVpbGQvJHtTaGFyZUZpbGV9KQorICAgIGxpc3QoQVBQRU5EIERlcGVuZHMgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLWJ1aWxkLyR7U2hhcmVGaWxlfSkKKyAgICBpbnN0YWxsKEZJTEVTIHNoYXJlL3NjYW4tYnVpbGQvJHtTaGFyZUZpbGV9IERFU1RJTkFUSU9OIHNoYXJlL3NjYW4tYnVpbGQpCisgIGVuZGZvcmVhY2goKQorCisgIGFkZF9jdXN0b21fdGFyZ2V0KHNjYW4tYnVpbGQgQUxMIERFUEVORFMgJHtEZXBlbmRzfSkKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHNjYW4tYnVpbGQgUFJPUEVSVElFUyBGT0xERVIgIk1pc2MiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL01ha2VmaWxlIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYWExOTgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvTWFrZWZpbGUKQEAgLTAsMCArMSw1MyBAQAorIyM9PT0tIHRvb2xzL3NjYW4tYnVpbGQvTWFrZWZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gTWFrZWZpbGUgLSotPT09IyMKKyMgCisjICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisjIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKyMgCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworCitDTEFOR19MRVZFTCA6PSAuLi8uLgorCitpbmNsdWRlICQoQ0xBTkdfTEVWRUwpLy4uLy4uL01ha2VmaWxlLmNvbmZpZworaW5jbHVkZSAkKENMQU5HX0xFVkVMKS9NYWtlZmlsZQorCitpZmVxICgkKEhPU1RfT1MpLE1pbmdXKQorICBTdWZmaXggOj0gLmJhdAorZW5kaWYKKworQ0xBTkdfSU5TVEFMTF9TQ0FOQlVJTEQgPz0gMQorCitpZmVxICgkKENMQU5HX0lOU1RBTExfU0NBTkJVSUxEKSwgMSkKKyAgSW5zdGFsbFRhcmdldHMgOj0gJChUb29sRGlyKS9zY2FuLWJ1aWxkJChTdWZmaXgpIFwKKyAgICAgICAgICAgICAgICAgICAgJChMaWJleGVjRGlyKS9jKystYW5hbHl6ZXIkKFN1ZmZpeCkgXAorICAgICAgICAgICAgICAgICAgICAkKExpYmV4ZWNEaXIpL2NjYy1hbmFseXplciQoU3VmZml4KSBcCisgICAgICAgICAgICAgICAgICAgICQoU2hhcmVEaXIpL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzIFwKKyAgICAgICAgICAgICAgICAgICAgJChTaGFyZURpcikvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMgXAorICAgICAgICAgICAgICAgICAgICAkKFNoYXJlRGlyKS9tYW4vbWFuMS9zY2FuLWJ1aWxkLjEKKworICBpZmVxICgkKEhPU1RfT1MpLERhcndpbikKKyAgICBJbnN0YWxsVGFyZ2V0cyA6PSAkKEluc3RhbGxUYXJnZXRzKSAkKFRvb2xEaXIpL3NldC14Y29kZS1hbmFseXplcgorICBlbmRpZgorZW5kaWYKKworYWxsOjogJChJbnN0YWxsVGFyZ2V0cykKKworJChUb29sRGlyKS8lOiBiaW4vJSBNYWtlZmlsZSAkKFRvb2xEaXIpLy5kaXIKKwkkKEVjaG8pICJDb3B5aW5nICQobm90ZGlyICQ8KSB0byB0aGUgJ2JpbicgZGlyZWN0b3J5Li4uIgorCSQoVmVyYiljcCAkPCAkQAorCSQoVmVyYiljaG1vZCAreCAkQAorCiskKExpYmV4ZWNEaXIpLyU6IGxpYmV4ZWMvJSBNYWtlZmlsZSAkKExpYmV4ZWNEaXIpLy5kaXIKKwkkKEVjaG8pICJDb3B5aW5nICQobm90ZGlyICQ8KSB0byB0aGUgJ2xpYmV4ZWMnIGRpcmVjdG9yeS4uLiIKKwkkKFZlcmIpY3AgJDwgJEAKKwkkKFZlcmIpY2htb2QgK3ggJEAKKworJChTaGFyZURpcikvbWFuL21hbjEvJTogbWFuLyUgTWFrZWZpbGUgJChTaGFyZURpcikvbWFuL21hbjEvLmRpcgorCSQoRWNobykgIkNvcHlpbmcgJChub3RkaXIgJDwpIHRvIHRoZSAnbWFuJyBkaXJlY3RvcnkuLi4iCisJJChWZXJiKWNwICQ8ICRACisKKyQoU2hhcmVEaXIpL3NjYW4tYnVpbGQvJTogc2hhcmUvc2Nhbi1idWlsZC8lIE1ha2VmaWxlICQoU2hhcmVEaXIpL3NjYW4tYnVpbGQvLmRpcgorCSQoRWNobykgIkNvcHlpbmcgJChub3RkaXIgJDwpIHRvIHRoZSAnc2hhcmUnIGRpcmVjdG9yeS4uLiIKKwkkKFZlcmIpY3AgJDwgJEAKKwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2Jpbi9zY2FuLWJ1aWxkIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2Jpbi9zY2FuLWJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhMTQ0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NjYW4tYnVpbGQKQEAgLTAsMCArMSwxODMyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjCisjICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKyMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlCisjIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKyMKKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisjCisjIEEgc2NyaXB0IGRlc2lnbmVkIHRvIHdyYXAgYSBidWlsZCBzbyB0aGF0IGFsbCBjYWxscyB0byBnY2MgYXJlIGludGVyY2VwdGVkCisjIGFuZCBwaXBlZCB0byB0aGUgc3RhdGljIGFuYWx5emVyLgorIworIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBGaW5kQmluIHF3KCRSZWFsQmluKTsKK3VzZSBEaWdlc3Q6Ok1ENTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBGaWxlOjpGaW5kOwordXNlIEZpbGU6OkNvcHkgcXcoY29weSk7Cit1c2UgRmlsZTo6UGF0aCBxdyggcm10cmVlIG1rcGF0aCApOwordXNlIFRlcm06OkFOU0lDb2xvcjsKK3VzZSBUZXJtOjpBTlNJQ29sb3IgcXcoOmNvbnN0YW50cyk7Cit1c2UgQ3dkIHF3LyBnZXRjd2QgYWJzX3BhdGggLzsKK3VzZSBTeXM6Okhvc3RuYW1lOwordXNlIEhhc2g6OlV0aWwgcXcobG9ja19rZXlzKTsKKworbXkgJFByb2cgPSAic2Nhbi1idWlsZCI7CitteSAkQnVpbGROYW1lOworbXkgJEJ1aWxkRGF0ZTsKKworbXkgJFRFUk0gPSAkRU5WeydURVJNJ307CitteSAkVXNlQ29sb3IgPSAoZGVmaW5lZCAkVEVSTSBhbmQgJFRFUk0gPX4gJ3h0ZXJtLS4qY29sb3InIGFuZCAtdCBTVERPVVQKKyAgICAgICAgICAgICAgICBhbmQgZGVmaW5lZCAkRU5WeydTQ0FOX0JVSUxEX0NPTE9SJ30pOworCisjIFBvcnRhYmlsaXR5OiBnZXRwd3VpZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIFdpbjMyIChzZWUgUGVybCBsYW5ndWFnZQorIyByZWZlcmVuY2UsIHBlcmxwb3J0KSwgdXNlIGdldGxvZ2luIGluc3RlYWQuCitteSAkVXNlck5hbWUgPSBIdG1sRXNjYXBlKGdldGxvZ2luKCkgfHwgZ2V0cHd1aWQoJDwpIHx8ICd1bmtub3duJyk7CitteSAkSG9zdE5hbWUgPSBIdG1sRXNjYXBlKGhvc3RuYW1lKCkgfHwgJ3Vua25vd24nKTsKK215ICRDdXJyZW50RGlyID0gSHRtbEVzY2FwZShnZXRjd2QoKSk7CisKK215ICRDbWRBcmdzOworCitteSAkRGF0ZSA9IGxvY2FsdGltZSgpOworCisjIENvbW1hbmQtbGluZS9jb25maWcgYXJndW1lbnRzLgorbXkgJU9wdGlvbnMgPSAoCisgIFZlcmJvc2UgPT4gMCwgICAgICAgICAgICAgICMgVmVyYm9zZSBvdXRwdXQgZnJvbSB0aGlzIHNjcmlwdC4KKyAgQW5hbHl6ZUhlYWRlcnMgPT4gMCwKKyAgT3V0cHV0RGlyID0+IHVuZGVmLCAgICAgICAgIyBQYXJlbnQgZGlyZWN0b3J5IHRvIHN0b3JlIEhUTUwgZmlsZXMuCisgIEh0bWxUaXRsZSA9PiBiYXNlbmFtZSgkQ3VycmVudERpcikuIiAtIHNjYW4tYnVpbGQgcmVzdWx0cyIsCisgIElnbm9yZUVycm9ycyA9PiAwLCAgICAgICAgICMgSWdub3JlIGJ1aWxkIGVycm9ycy4KKyAgVmlld1Jlc3VsdHMgPT4gMCwgICAgICAgICAgIyBWaWV3IHJlc3VsdHMgd2hlbiB0aGUgYnVpbGQgdGVybWluYXRlcy4KKyAgRXhpdFN0YXR1c0ZvdW5kQnVncyA9PiAwLCAgIyBFeGl0IHN0YXR1cyByZWZsZWN0cyB3aGV0aGVyIGJ1Z3Mgd2VyZSBmb3VuZAorICBLZWVwRW1wdHkgPT4gMCwgICAgICAgICAgICAjIERvbid0IHJlbW92ZSBvdXRwdXQgZGlyZWN0b3J5IGV2ZW4gd2l0aCAwIHJlc3VsdHMuCisgIEVuYWJsZUNoZWNrZXJzID0+IHt9LAorICBEaXNhYmxlQ2hlY2tlcnMgPT4ge30sCisgIFVzZUNDID0+IHVuZGVmLCAgICAgICAgICAgICMgQyBjb21waWxlciB0byB1c2UgZm9yIGNvbXBpbGF0aW9uLgorICBVc2VDWFggPT4gdW5kZWYsICAgICAgICAgICAjIEMrKyBjb21waWxlciB0byB1c2UgZm9yIGNvbXBpbGF0aW9uLgorICBBbmFseXplclRhcmdldCA9PiB1bmRlZiwKKyAgU3RvcmVNb2RlbCA9PiB1bmRlZiwKKyAgQ29uc3RyYWludHNNb2RlbCA9PiB1bmRlZiwKKyAgSW50ZXJuYWxTdGF0cyA9PiB1bmRlZiwKKyAgT3V0cHV0Rm9ybWF0ID0+ICJodG1sIiwKKyAgQ29uZmlnT3B0aW9ucyA9PiBbXSwgICAgICAgIyBPcHRpb25zIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYW5hbHl6ZXIncyAtYW5hbHl6ZXItY29uZmlnIGZsYWcuCisgIFJlcG9ydEZhaWx1cmVzID0+IHVuZGVmLAorICBBbmFseXplclN0YXRzID0+IDAsCisgIE1heExvb3AgPT4gMCwKKyAgUGx1Z2luc1RvTG9hZCA9PiBbXSwKKyAgQW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2QgPT4gdW5kZWYsCisgIE92ZXJyaWRlQ29tcGlsZXIgPT4gMCAgICAgICMgVGhlIGZsYWcgY29ycmVzcG9uZGluZyB0byB0aGUgLS1vdmVycmlkZS1jb21waWxlciBjb21tYW5kIGxpbmUgb3B0aW9uLgorKTsKK2xvY2tfa2V5cyglT3B0aW9ucyk7CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIERpYWdub3N0aWNzCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgRGlhZyB7CisgIGlmICgkVXNlQ29sb3IpIHsKKyAgICBwcmludCBCT0xELCBNQUdFTlRBICIkUHJvZzogQF8iOworICAgIHByaW50IFJFU0VUOworICB9CisgIGVsc2UgeworICAgIHByaW50ICIkUHJvZzogQF8iOworICB9Cit9CisKK3N1YiBFcnJvckRpYWcgeworICBpZiAoJFVzZUNvbG9yKSB7CisgICAgcHJpbnQgU1RERVJSIEJPTEQsIFJFRCAiJFByb2c6ICI7CisgICAgcHJpbnQgU1RERVJSIFJFU0VULCBSRUQgQF87CisgICAgcHJpbnQgU1RERVJSIFJFU0VUOworICB9IGVsc2UgeworICAgIHByaW50IFNUREVSUiAiJFByb2c6IEBfIjsKKyAgfQorfQorCitzdWIgRGlhZ0NyYXNoZXMgeworICBteSAkRGlyID0gc2hpZnQ7CisgIERpYWcgKCJUaGUgYW5hbHl6ZXIgZW5jb3VudGVyZWQgcHJvYmxlbXMgb24gc29tZSBzb3VyY2UgZmlsZXMuXG4iKTsKKyAgRGlhZyAoIlByZXByb2Nlc3NlZCB2ZXJzaW9ucyBvZiB0aGVzZSBzb3VyY2VzIHdlcmUgZGVwb3NpdGVkIGluICckRGlyL2ZhaWx1cmVzJy5cbiIpOworICBEaWFnICgiUGxlYXNlIGNvbnNpZGVyIHN1Ym1pdHRpbmcgYSBidWcgcmVwb3J0IHVzaW5nIHRoZXNlIGZpbGVzOlxuIik7CisgIERpYWcgKCIgIGh0dHA6Ly9jbGFuZy1hbmFseXplci5sbHZtLm9yZy9maWxpbmdfYnVncy5odG1sXG4iKQorfQorCitzdWIgRGllRGlhZyB7CisgIGlmICgkVXNlQ29sb3IpIHsKKyAgICBwcmludCBTVERFUlIgQk9MRCwgUkVEICIkUHJvZzogIjsKKyAgICBwcmludCBTVERFUlIgUkVTRVQsIFJFRCBAXzsKKyAgICBwcmludCBTVERFUlIgUkVTRVQ7CisgIH0KKyAgZWxzZSB7CisgICAgcHJpbnQgU1RERVJSICIkUHJvZzogIiwgQF87CisgIH0KKyAgZXhpdCAxOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBQcmludCBkZWZhdWx0IGNoZWNrZXIgbmFtZXMKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK2lmIChncmVwIC9eLS1oZWxwLWNoZWNrZXJzJC8sIEBBUkdWKSB7CisgICAgbXkgQG9wdGlvbnMgPSBxeCgkMCAtaCk7CisgICAgZm9yZWFjaCAoQG9wdGlvbnMpIHsKKyAgICBuZXh0IHVubGVzcyAvXiBcKy87CisgICAgcy9eXHMqLy87CisgICAgbXkgKCRzaWduLCAkbmFtZSwgQHRleHQpID0gc3BsaXQgJyAnLCAkXzsKKyAgICBwcmludCAkbmFtZSwgJC8gaWYgJHNpZ24gZXEgJysnOworICAgIH0KKyAgICBleGl0IDA7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIERlY2xhcmF0aW9uIG9mIENsYW5nIG9wdGlvbnMuICBQb3B1bGF0ZWQgbGF0ZXIuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSAkQ2xhbmc7CitteSAkQ2xhbmdTQjsKK215ICRDbGFuZ0NYWDsKK215ICRDbGFuZ1ZlcnNpb247CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIEdldEhUTUxSdW5EaXIgLSBDb25zdHJ1Y3QgYW4gSFRNTCBkaXJlY3RvcnkgbmFtZSBmb3IgdGhlIGN1cnJlbnQgc3ViLXJ1bi4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBHZXRIVE1MUnVuRGlyIHsKKyAgZGllICJOb3QgZW5vdWdoIGFyZ3VtZW50cy4iIGlmIChAXyA9PSAwKTsKKyAgbXkgJERpciA9IHNoaWZ0IEBfOworICBteSAkVG1wTW9kZSA9IDA7CisgIGlmICghZGVmaW5lZCAkRGlyKSB7CisgICAgJERpciA9ICRFTlZ7J1RNUERJUid9IHx8ICRFTlZ7J1RFTVAnfSB8fCAkRU5WeydUTVAnfSB8fCAiL3RtcCI7CisgICAgJFRtcE1vZGUgPSAxOworICB9CisKKyAgIyBDaG9wIG9mZiBhbnkgdHJhaWxpbmcgJy8nIGNoYXJhY3RlcnMuCisgIHdoaWxlICgkRGlyID1+IC9cLyQvKSB7IGNob3AgJERpcjsgfQorCisgICMgR2V0IGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KKyAgbXkgQEN1cnJlbnRUaW1lID0gbG9jYWx0aW1lKCk7CisgIG15ICR5ZWFyICA9ICRDdXJyZW50VGltZVs1XSArIDE5MDA7CisgIG15ICRkYXkgICA9ICRDdXJyZW50VGltZVszXTsKKyAgbXkgJG1vbnRoID0gJEN1cnJlbnRUaW1lWzRdICsgMTsKKyAgbXkgJGhvdXIgPSAgJEN1cnJlbnRUaW1lWzJdOworICBteSAkbWluID0gICAkQ3VycmVudFRpbWVbMV07CisgIG15ICRzZWMgPSAgICRDdXJyZW50VGltZVswXTsKKworICBteSAkVGltZVN0cmluZyA9IHNwcmludGYoIiUwMmQlMDJkJTAyZCIsICRob3VyLCAkbWluLCAkc2VjKTsKKyAgbXkgJERhdGVTdHJpbmcgPSBzcHJpbnRmKCIlZC0lMDJkLSUwMmQtJXMtJCQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJHllYXIsICRtb250aCwgJGRheSwgJFRpbWVTdHJpbmcpOworCisgICMgRGV0ZXJtaW5lIHRoZSBydW4gbnVtYmVyLgorICBteSAkUnVuTnVtYmVyOworCisgIGlmICgtZCAkRGlyKSB7CisgICAgaWYgKCEgLXIgJERpcikgeworICAgICAgRGllRGlhZygiZGlyZWN0b3J5ICckRGlyJyBleGlzdHMgYnV0IGlzIG5vdCByZWFkYWJsZS5cbiIpOworICAgIH0KKyAgICAjIEl0ZXJhdGUgb3ZlciBhbGwgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCisgICAgbXkgJG1heCA9IDA7CisgICAgb3BlbmRpcihESVIsICREaXIpOworICAgIG15IEBGSUxFUyA9IGdyZXAgeyAtZCAiJERpci8kXyIgfSByZWFkZGlyKERJUik7CisgICAgY2xvc2VkaXIoRElSKTsKKworICAgIGZvcmVhY2ggbXkgJGYgKEBGSUxFUykgeworICAgICAgIyBTdHJpcCB0aGUgcHJlZml4ICckUHJvZy0nIGlmIHdlIGFyZSBkdW1waW5nIGZpbGVzIHRvIC90bXAuCisgICAgICBpZiAoJFRtcE1vZGUpIHsKKyAgICAgICAgbmV4dCBpZiAoISgkZiA9fiAvXiRQcm9nLSguKykvKSk7CisgICAgICAgICRmID0gJDE7CisgICAgICB9CisKKyAgICAgIG15IEB4ID0gc3BsaXQvLS8sICRmOworICAgICAgbmV4dCBpZiAoc2NhbGFyKEB4KSAhPSA0KTsKKyAgICAgIG5leHQgaWYgKCR4WzBdICE9ICR5ZWFyKTsKKyAgICAgIG5leHQgaWYgKCR4WzFdICE9ICRtb250aCk7CisgICAgICBuZXh0IGlmICgkeFsyXSAhPSAkZGF5KTsKKyAgICAgIG5leHQgaWYgKCR4WzNdICE9ICRUaW1lU3RyaW5nKTsKKyAgICAgIG5leHQgaWYgKCR4WzRdICE9ICQkKTsKKworICAgICAgaWYgKCR4WzVdID4gJG1heCkgeworICAgICAgICAkbWF4ID0gJHhbNV07CisgICAgICB9CisgICAgfQorCisgICAgJFJ1bk51bWJlciA9ICRtYXggKyAxOworICB9CisgIGVsc2UgeworCisgICAgaWYgKC14ICREaXIpIHsKKyAgICAgIERpZURpYWcoIickRGlyJyBleGlzdHMgYnV0IGlzIG5vdCBhIGRpcmVjdG9yeS5cbiIpOworICAgIH0KKworICAgIGlmICgkVG1wTW9kZSkgeworICAgICAgRGllRGlhZygiVGhlIGRpcmVjdG9yeSAnL3RtcCcgZG9lcyBub3QgZXhpc3Qgb3IgY2Fubm90IGJlIGFjY2Vzc2VkLlxuIik7CisgICAgfQorCisgICAgIyAkRGlyIGRvZXMgbm90IGV4aXN0LiAgSXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdGhlCisgICAgIyBjbGFuZyBkcml2ZXIuICBTZXQgdGhlIHJ1biBudW1iZXIgdG8gMS4KKworICAgICRSdW5OdW1iZXIgPSAxOworICB9CisKKyAgZGllICJSdW5OdW1iZXIgbXVzdCBiZSBkZWZpbmVkISIgaWYgKCFkZWZpbmVkICRSdW5OdW1iZXIpOworCisgICMgQXBwZW5kIHRoZSBydW4gbnVtYmVyLgorICBteSAkTmV3RGlyOworICBpZiAoJFRtcE1vZGUpIHsKKyAgICAkTmV3RGlyID0gIiREaXIvJFByb2ctJERhdGVTdHJpbmctJFJ1bk51bWJlciI7CisgIH0KKyAgZWxzZSB7CisgICAgJE5ld0RpciA9ICIkRGlyLyREYXRlU3RyaW5nLSRSdW5OdW1iZXIiOworICB9CisKKyAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGluIG9yZGVyIHRvIGF2b2lkIGhpamFjay4KKyAgaWYgKC1lICROZXdEaXIpIHsKKyAgICAgIERpZURpYWcoIlRoZSBkaXJlY3RvcnkgJyROZXdEaXInIGFscmVhZHkgZXhpc3RzLlxuIik7CisgIH0KKworICBta3BhdGgoJE5ld0Rpcik7CisgIHJldHVybiAkTmV3RGlyOworfQorCitzdWIgU2V0SHRtbEVudiB7CisKKyAgZGllICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiIgaWYgKHNjYWxhcihAXykgIT0gMik7CisKKyAgbXkgJEFyZ3MgPSBzaGlmdDsKKyAgbXkgJERpciA9IHNoaWZ0OworCisgIGRpZSAiTm8gYnVpbGQgY29tbWFuZC4iIGlmIChzY2FsYXIoQCRBcmdzKSA9PSAwKTsKKworICBteSAkQ21kID0gJCRBcmdzWzBdOworCisgIGlmICgkQ21kID1+IC9jb25maWd1cmUvIHx8ICRDbWQgPX4gL2F1dG9nZW4vKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKCRPcHRpb25ze1ZlcmJvc2V9KSB7CisgICAgRGlhZygiRW1pdHRpbmcgcmVwb3J0cyBmb3IgdGhpcyBydW4gdG8gJyREaXInLlxuIik7CisgIH0KKworICAkRU5WeydDQ0NfQU5BTFlaRVJfSFRNTCd9ID0gJERpcjsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgQ29tcHV0ZURpZ2VzdCAtIENvbXB1dGUgYSBkaWdlc3Qgb2YgdGhlIHNwZWNpZmllZCBmaWxlLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIENvbXB1dGVEaWdlc3QgeworICBteSAkRk5hbWUgPSBzaGlmdDsKKyAgRGllRGlhZygiQ2Fubm90IHJlYWQgJEZOYW1lIHRvIGNvbXB1dGUgRGlnZXN0LlxuIikgaWYgKCEgLXIgJEZOYW1lKTsKKworICAjIFVzZSBEaWdlc3Q6Ok1ENS4gIFdlIGRvbid0IGhhdmUgdG8gYmUgY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlLiAgV2UncmUKKyAgIyBqdXN0IGxvb2tpbmcgZm9yIGR1cGxpY2F0ZSBmaWxlcyB0aGF0IGNvbWUgZnJvbSBhIG5vbi1tYWxpY2lvdXMgc291cmNlLgorICAjIFdlIHVzZSBEaWdlc3Q6Ok1ENSBiZWNhdXNlIGl0IGlzIGEgc3RhbmRhcmQgUGVybCBtb2R1bGUgdGhhdCBzaG91bGQKKyAgIyBjb21lIGJ1bmRsZWQgb24gbW9zdCBzeXN0ZW1zLgorICBvcGVuKEZJTEUsICRGTmFtZSkgb3IgRGllRGlhZygiQ2Fubm90IG9wZW4gJEZOYW1lIHdoZW4gY29tcHV0aW5nIERpZ2VzdC5cbiIpOworICBiaW5tb2RlIEZJTEU7CisgIG15ICRSZXN1bHQgPSBEaWdlc3Q6Ok1ENS0+bmV3LT5hZGRmaWxlKCpGSUxFKS0+aGV4ZGlnZXN0OworICBjbG9zZShGSUxFKTsKKworICAjIFJldHVybiB0aGUgZGlnZXN0LgorICByZXR1cm4gJFJlc3VsdDsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgIFVwZGF0ZVByZWZpeCAtIENvbXB1dGUgdGhlIGNvbW1vbiBwcmVmaXggb2YgZmlsZXMuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSAkUHJlZml4OworCitzdWIgVXBkYXRlUHJlZml4IHsKKyAgbXkgJHggPSBzaGlmdDsKKyAgbXkgJHkgPSBiYXNlbmFtZSgkeCk7CisgICR4ID1+IHMvXFEkeVxFJC8vOworCisgIGlmICghZGVmaW5lZCAkUHJlZml4KSB7CisgICAgJFByZWZpeCA9ICR4OworICAgIHJldHVybjsKKyAgfQorCisgIGNob3AgJFByZWZpeCB3aGlsZSAoISgkeCA9fiAvXlxRJFByZWZpeC8pKTsKK30KKworc3ViIEdldFByZWZpeCB7CisgIHJldHVybiAkUHJlZml4OworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyAgVXBkYXRlSW5GaWxlUGF0aCAtIFVwZGF0ZSB0aGUgcGF0aCBpbiB0aGUgcmVwb3J0IGZpbGUuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgVXBkYXRlSW5GaWxlUGF0aCB7CisgIG15ICRmbmFtZSA9IHNoaWZ0OworICBteSAkcmVnZXggPSBzaGlmdDsKKyAgbXkgJG5ld3RleHQgPSBzaGlmdDsKKworICBvcGVuIChSSU4sICRmbmFtZSkgb3IgZGllICJjYW5ub3Qgb3BlbiAkZm5hbWUiOworICBvcGVuIChST1VULCAiPiIsICIkZm5hbWUudG1wIikgb3IgZGllICJjYW5ub3Qgb3BlbiAkZm5hbWUudG1wIjsKKworICB3aGlsZSAoPFJJTj4pIHsKKyAgICBzLyRyZWdleC8kbmV3dGV4dC87CisgICAgcHJpbnQgUk9VVCAkXzsKKyAgfQorCisgIGNsb3NlIChST1VUKTsKKyAgY2xvc2UgKFJJTik7CisgIHJlbmFtZSgiJGZuYW1lLnRtcCIsICRmbmFtZSkKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgQWRkU3RhdExpbmUgLSBEZWNvZGUgYW5kIGluc2VydCBhIHN0YXRpc3RpY3MgbGluZSBpbnRvIHRoZSBkYXRhYmFzZS4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBBZGRTdGF0TGluZSB7CisgIG15ICRMaW5lICA9IHNoaWZ0OworICBteSAkU3RhdHMgPSBzaGlmdDsKKyAgbXkgJEZpbGUgID0gc2hpZnQ7CisKKyAgcHJpbnQgJExpbmUgLiAiXG4iOworCisgIG15ICRSZWdleCA9IHFyLyguKj8pXCAtPlwgVG90YWxcIENGR0Jsb2NrczpcIChcZCspXCBcfFwgVW5yZWFjaGFibGUKKyAgICAgIFwgQ0ZHQmxvY2tzOlwgKFxkKylcIFx8XCBFeGhhdXN0ZWRcIEJsb2NrOlwgKHllc3xubylcIFx8XCBFbXB0eVwgV29ya0xpc3Q6CisgICAgICBcICh5ZXN8bm8pL3g7CisKKyAgaWYgKCRMaW5lICF+ICRSZWdleCkgeworICAgIHJldHVybjsKKyAgfQorCisgICMgQ3JlYXRlIGEgaGFzaCBvZiB0aGUgaW50ZXJlc3RpbmcgZmllbGRzCisgIG15ICRSb3cgPSB7CisgICAgRmlsZW5hbWUgICAgPT4gJEZpbGUsCisgICAgRnVuY3Rpb24gICAgPT4gJDEsCisgICAgVG90YWwgICAgICAgPT4gJDIsCisgICAgVW5yZWFjaGFibGUgPT4gJDMsCisgICAgQWJvcnRlZCAgICAgPT4gJDQsCisgICAgRW1wdHkgICAgICAgPT4gJDUKKyAgfTsKKworICAjIEFkZCB0aGVtIHRvIHRoZSBzdGF0cyBhcnJheQorICBwdXNoIEAkU3RhdHMsICRSb3c7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFNjYW5GaWxlIC0gU2NhbiBhIHJlcG9ydCBmaWxlIGZvciB2YXJpb3VzIGlkZW50aWZ5aW5nIGF0dHJpYnV0ZXMuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCisjIFNvbWV0aW1lcyBhIHNvdXJjZSBmaWxlIGlzIHNjYW5uZWQgbW9yZSB0aGFuIG9uY2UsIGFuZCB0aHVzIHByb2R1Y2VzCisjIG11bHRpcGxlIGVycm9yIHJlcG9ydHMuICBXZSB1c2UgYSBjYWNoZSB0byBzb2x2ZSB0aGlzIHByb2JsZW0uCisKK215ICVBbHJlYWR5U2Nhbm5lZDsKKworc3ViIFNjYW5GaWxlIHsKKworICBteSAkSW5kZXggPSBzaGlmdDsKKyAgbXkgJERpciA9IHNoaWZ0OworICBteSAkRk5hbWUgPSBzaGlmdDsKKyAgbXkgJFN0YXRzID0gc2hpZnQ7CisKKyAgIyBDb21wdXRlIGEgZGlnZXN0IGZvciB0aGUgcmVwb3J0IGZpbGUuICBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbHJlYWR5CisgICMgc2Nhbm5lZCBhIGZpbGUgdGhhdCBsb29rcyBqdXN0IGxpa2UgaXQuCisKKyAgbXkgJGRpZ2VzdCA9IENvbXB1dGVEaWdlc3QoIiREaXIvJEZOYW1lIik7CisKKyAgaWYgKGRlZmluZWQgJEFscmVhZHlTY2FubmVkeyRkaWdlc3R9KSB7CisgICAgIyBSZWR1bmRhbnQgZmlsZS4gIFJlbW92ZSBpdC4KKyAgICB1bmxpbmsoIiREaXIvJEZOYW1lIik7CisgICAgcmV0dXJuOworICB9CisKKyAgJEFscmVhZHlTY2FubmVkeyRkaWdlc3R9ID0gMTsKKworICAjIEF0IHRoaXMgcG9pbnQgdGhlIHJlcG9ydCBmaWxlIGlzIG5vdCB3b3JsZCByZWFkYWJsZS4gIE1ha2UgaXQgaGFwcGVuLgorICBjaG1vZCgwNjQ0LCAiJERpci8kRk5hbWUiKTsKKworICAjIFNjYW4gdGhlIHJlcG9ydCBmaWxlIGZvciB0YWdzLgorICBvcGVuKElOLCAiJERpci8kRk5hbWUiKSBvciBEaWVEaWFnKCJDYW5ub3Qgb3BlbiAnJERpci8kRk5hbWUnXG4iKTsKKworICBteSAkQnVnVHlwZSAgICAgICAgPSAiIjsKKyAgbXkgJEJ1Z0ZpbGUgICAgICAgID0gIiI7CisgIG15ICRCdWdGdW5jdGlvbiAgICA9ICIiOworICBteSAkQnVnQ2F0ZWdvcnkgICAgPSAiIjsKKyAgbXkgJEJ1Z0Rlc2NyaXB0aW9uID0gIiI7CisgIG15ICRCdWdQYXRoTGVuZ3RoICA9IDE7CisgIG15ICRCdWdMaW5lICAgICAgICA9IDA7CisKKyAgd2hpbGUgKDxJTj4pIHsKKyAgICBsYXN0IGlmICgvPCEtLSBCVUdNRVRBRU5EIC0tPi8pOworCisgICAgaWYgKC88IS0tIEJVR1RZUEUgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z1R5cGUgPSAkMTsKKyAgICB9CisgICAgZWxzaWYgKC88IS0tIEJVR0ZJTEUgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z0ZpbGUgPSBhYnNfcGF0aCgkMSk7CisgICAgICBpZiAoIWRlZmluZWQgJEJ1Z0ZpbGUpIHsKKyAgICAgICAgICMgVGhlIGZpbGUgbm8gbG9uZ2VyIGV4aXN0czogdXNlIHRoZSBvcmlnaW5hbCBwYXRoLgorICAgICAgICAgJEJ1Z0ZpbGUgPSAkMTsKKyAgICAgIH0KKyAgICAgIFVwZGF0ZVByZWZpeCgkQnVnRmlsZSk7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBCVUdQQVRITEVOR1RIICguKikgLS0+JC8pIHsKKyAgICAgICRCdWdQYXRoTGVuZ3RoID0gJDE7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBCVUdMSU5FICguKikgLS0+JC8pIHsKKyAgICAgICRCdWdMaW5lID0gJDE7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBCVUdDQVRFR09SWSAoLiopIC0tPiQvKSB7CisgICAgICAkQnVnQ2F0ZWdvcnkgPSAkMTsKKyAgICB9CisgICAgZWxzaWYgKC88IS0tIEJVR0RFU0MgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z0Rlc2NyaXB0aW9uID0gJDE7CisgICAgfQorICAgIGVsc2lmICgvPCEtLSBGVU5DVElPTk5BTUUgKC4qKSAtLT4kLykgeworICAgICAgJEJ1Z0Z1bmN0aW9uID0gJDE7CisgICAgfQorCisgIH0KKworCisgIGNsb3NlKElOKTsKKworICBpZiAoIWRlZmluZWQgJEJ1Z0NhdGVnb3J5KSB7CisgICAgJEJ1Z0NhdGVnb3J5ID0gIk90aGVyIjsKKyAgfQorCisgICMgRG9uJ3QgYWRkIGludGVybmFsIHN0YXRpc3RpY3MgdG8gdGhlIGJ1ZyByZXBvcnRzCisgIGlmICgkQnVnQ2F0ZWdvcnkgPX4gL3N0YXRpc3RpY3MvaSkgeworICAgIEFkZFN0YXRMaW5lKCRCdWdEZXNjcmlwdGlvbiwgJFN0YXRzLCAkQnVnRmlsZSk7CisgICAgcmV0dXJuOworICB9CisKKyAgcHVzaCBAJEluZGV4LFsgJEZOYW1lLCAkQnVnQ2F0ZWdvcnksICRCdWdUeXBlLCAkQnVnRmlsZSwgJEJ1Z0Z1bmN0aW9uLCAkQnVnTGluZSwKKyAgICAgICAgICAgICAgICAgJEJ1Z1BhdGhMZW5ndGggXTsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgQ29weUZpbGVzIC0gQ29weSByZXNvdXJjZSBmaWxlcyB0byB0YXJnZXQgZGlyZWN0b3J5LgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIENvcHlGaWxlcyB7CisKKyAgbXkgJERpciA9IHNoaWZ0OworCisgIG15ICRKUyA9IEN3ZDo6cmVhbHBhdGgoIiRSZWFsQmluLy4uL3NoYXJlL3NjYW4tYnVpbGQvc29ydHRhYmxlLmpzIik7CisKKyAgRGllRGlhZygiQ2Fubm90IGZpbmQgJ3NvcnR0YWJsZS5qcycuXG4iKQorICAgIGlmICghIC1yICRKUyk7CisKKyAgY29weSgkSlMsICIkRGlyIik7CisKKyAgRGllRGlhZygiQ291bGQgbm90IGNvcHkgJ3NvcnR0YWJsZS5qcycgdG8gJyREaXInLlxuIikKKyAgICBpZiAoISAtciAiJERpci9zb3J0dGFibGUuanMiKTsKKworICBteSAkQ1NTID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vLi4vc2hhcmUvc2Nhbi1idWlsZC9zY2Fudmlldy5jc3MiKTsKKworICBEaWVEaWFnKCJDYW5ub3QgZmluZCAnc2NhbnZpZXcuY3NzJy5cbiIpCisgICAgaWYgKCEgLXIgJENTUyk7CisKKyAgY29weSgkQ1NTLCAiJERpciIpOworCisgIERpZURpYWcoIkNvdWxkIG5vdCBjb3B5ICdzY2Fudmlldy5jc3MnIHRvICckRGlyJy5cbiIpCisgICAgaWYgKCEgLXIgJENTUyk7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIENhbGNTdGF0cyAtIENhbGN1bGF0ZXMgdmlzaXRhdGlvbiBzdGF0aXN0aWNzIGFuZCByZXR1cm5zIHRoZSBzdHJpbmcuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgQ2FsY1N0YXRzIHsKKyAgbXkgJFN0YXRzID0gc2hpZnQ7CisKKyAgbXkgJFRvdGFsQmxvY2tzID0gMDsKKyAgbXkgJFVucmVhY2hlZEJsb2NrcyA9IDA7CisgIG15ICRUb3RhbEZ1bmN0aW9ucyA9IHNjYWxhcihAJFN0YXRzKTsKKyAgbXkgJEJsb2NrQWJvcnRlZCA9IDA7CisgIG15ICRXb3JrTGlzdEFib3J0ZWQgPSAwOworICBteSAkQWJvcnRlZCA9IDA7CisKKyAgIyBDYWxjdWxhdGUgdGhlIHVuaXF1ZSBmaWxlcworICBteSAkRmlsZXNIYXNoID0ge307CisKKyAgZm9yZWFjaCBteSAkUm93IChAJFN0YXRzKSB7CisgICAgJEZpbGVzSGFzaC0+eyRSb3ctPntGaWxlbmFtZX19ID0gMTsKKyAgICAkVG90YWxCbG9ja3MgKz0gJFJvdy0+e1RvdGFsfTsKKyAgICAkVW5yZWFjaGVkQmxvY2tzICs9ICRSb3ctPntVbnJlYWNoYWJsZX07CisgICAgJEJsb2NrQWJvcnRlZCsrIGlmICRSb3ctPntBYm9ydGVkfSBlcSAneWVzJzsKKyAgICAkV29ya0xpc3RBYm9ydGVkKysgaWYgJFJvdy0+e0VtcHR5fSBlcSAnbm8nOworICAgICRBYm9ydGVkKysgaWYgJFJvdy0+e0Fib3J0ZWR9IGVxICd5ZXMnIHx8ICRSb3ctPntFbXB0eX0gZXEgJ25vJzsKKyAgfQorCisgIG15ICRUb3RhbEZpbGVzID0gc2NhbGFyKGtleXMoJSRGaWxlc0hhc2gpKTsKKworICAjIENhbGN1bGF0aW9ucworICBteSAkUGVyY2VudEFib3J0ZWQgPSBzcHJpbnRmKCIlLjJmIiwgJEFib3J0ZWQgLyAkVG90YWxGdW5jdGlvbnMgKiAxMDApOworICBteSAkUGVyY2VudEJsb2NrQWJvcnRlZCA9IHNwcmludGYoIiUuMmYiLCAkQmxvY2tBYm9ydGVkIC8gJFRvdGFsRnVuY3Rpb25zCisgICAgICAqIDEwMCk7CisgIG15ICRQZXJjZW50V29ya0xpc3RBYm9ydGVkID0gc3ByaW50ZigiJS4yZiIsICRXb3JrTGlzdEFib3J0ZWQgLworICAgICAgJFRvdGFsRnVuY3Rpb25zICogMTAwKTsKKyAgbXkgJFBlcmNlbnRCbG9ja3NVbnJlYWNoZWQgPSBzcHJpbnRmKCIlLjJmIiwgJFVucmVhY2hlZEJsb2NrcyAvICRUb3RhbEJsb2NrcworICAgICAgKiAxMDApOworCisgIG15ICRTdGF0c1N0cmluZyA9ICJBbmFseXplZCAkVG90YWxCbG9ja3MgYmxvY2tzIGluICRUb3RhbEZ1bmN0aW9ucyBmdW5jdGlvbnMiCisgICAgLiAiIGluICRUb3RhbEZpbGVzIGZpbGVzXG4iCisgICAgLiAiJEFib3J0ZWQgZnVuY3Rpb25zIGFib3J0ZWQgZWFybHkgKCRQZXJjZW50QWJvcnRlZCUpXG4iCisgICAgLiAiJEJsb2NrQWJvcnRlZCBoYWQgYWJvcnRlZCBibG9ja3MgKCRQZXJjZW50QmxvY2tBYm9ydGVkJSlcbiIKKyAgICAuICIkV29ya0xpc3RBYm9ydGVkIGhhZCB1bmZpbmlzaGVkIHdvcmtsaXN0cyAoJFBlcmNlbnRXb3JrTGlzdEFib3J0ZWQlKVxuIgorICAgIC4gIiRVbnJlYWNoZWRCbG9ja3MgYmxvY2tzIHdlcmUgbmV2ZXIgcmVhY2hlZCAoJFBlcmNlbnRCbG9ja3NVbnJlYWNoZWQlKVxuIjsKKworICByZXR1cm4gJFN0YXRzU3RyaW5nOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBQb3N0cHJvY2VzcyAtIFBvc3Rwcm9jZXNzIHRoZSByZXN1bHRzIG9mIGFuIGFuYWx5c2lzIHNjYW4uCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitteSBAZmlsZXNGb3VuZDsKK215ICRiYXNlRGlyOworc3ViIEZpbGVXYW50ZWQgeworICAgIG15ICRiYXNlRGlyUmVnRXggPSBxdW90ZW1ldGEgJGJhc2VEaXI7CisgICAgbXkgJGZpbGUgPSAkRmlsZTo6RmluZDo6bmFtZTsKKworICAgICMgVGhlIG5hbWUgb2YgdGhlIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IGNsYW5nIGJpbmFyeSAoSFRNTERpYWdub3N0aWNzLmNwcCkKKyAgICBpZiAoJGZpbGUgPX4gL3JlcG9ydC0uKlwuaHRtbCQvKSB7CisgICAgICAgbXkgJHJlbGF0aXZlX2ZpbGUgPSAkZmlsZTsKKyAgICAgICAkcmVsYXRpdmVfZmlsZSA9fiBzLyRiYXNlRGlyUmVnRXgvL2c7CisgICAgICAgcHVzaCBAZmlsZXNGb3VuZCwgJHJlbGF0aXZlX2ZpbGU7CisgICAgfQorfQorCitzdWIgUG9zdHByb2Nlc3MgeworCisgIG15ICREaXIgICAgICAgICAgID0gc2hpZnQ7CisgIG15ICRCYXNlRGlyICAgICAgID0gc2hpZnQ7CisgIG15ICRBbmFseXplclN0YXRzID0gc2hpZnQ7CisgIG15ICRLZWVwRW1wdHkgICAgID0gc2hpZnQ7CisKKyAgZGllICJObyBkaXJlY3Rvcnkgc3BlY2lmaWVkLiIgaWYgKCFkZWZpbmVkICREaXIpOworCisgIGlmICghIC1kICREaXIpIHsKKyAgICBEaWFnKCJObyBidWdzIGZvdW5kLlxuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAkYmFzZURpciA9ICREaXIgLiAiLyI7CisgIGZpbmQoeyB3YW50ZWQgPT4gXCZGaWxlV2FudGVkLCBmb2xsb3cgPT4gMH0sICREaXIpOworCisgIGlmIChzY2FsYXIoQGZpbGVzRm91bmQpID09IDAgYW5kICEgLWUgIiREaXIvZmFpbHVyZXMiKSB7CisgICAgaWYgKCEgJEtlZXBFbXB0eSkgeworICAgICAgRGlhZygiUmVtb3ZpbmcgZGlyZWN0b3J5ICckRGlyJyBiZWNhdXNlIGl0IGNvbnRhaW5zIG5vIHJlcG9ydHMuXG4iKTsKKyAgICAgIHJtdHJlZSgkRGlyKSBvciBkaWUgIkNhbm5vdCBybXRyZWUgJyREaXInIDogJCEiOworICAgIH0KKyAgICBEaWFnKCJObyBidWdzIGZvdW5kLlxuIik7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAjIFNjYW4gZWFjaCByZXBvcnQgZmlsZSBhbmQgYnVpbGQgYW4gaW5kZXguCisgIG15IEBJbmRleDsKKyAgbXkgQFN0YXRzOworICBmb3JlYWNoIG15ICRmaWxlIChAZmlsZXNGb3VuZCkgeyBTY2FuRmlsZShcQEluZGV4LCAkRGlyLCAkZmlsZSwgXEBTdGF0cyk7IH0KKworICAjIFNjYW4gdGhlIGZhaWx1cmVzIGRpcmVjdG9yeSBhbmQgdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgLmluZm8gZmlsZXMKKyAgIyB0byB1cGRhdGUgdGhlIGNvbW1vbiBwcmVmaXggZGlyZWN0b3J5LgorICBteSBAZmFpbHVyZXM7CisgIG15IEBhdHRyaWJ1dGVzX2lnbm9yZWQ7CisgIGlmICgtZCAiJERpci9mYWlsdXJlcyIpIHsKKyAgICBvcGVuZGlyKERJUiwgIiREaXIvZmFpbHVyZXMiKTsKKyAgICBAZmFpbHVyZXMgPSBncmVwIHsgL1suXWluZm8udHh0JC8gJiYgIS9hdHRyaWJ1dGVfaWdub3JlZC87IH0gcmVhZGRpcihESVIpOworICAgIGNsb3NlZGlyKERJUik7CisgICAgb3BlbmRpcihESVIsICIkRGlyL2ZhaWx1cmVzIik7CisgICAgQGF0dHJpYnV0ZXNfaWdub3JlZCA9IGdyZXAgeyAvXmF0dHJpYnV0ZV9pZ25vcmVkLzsgfSByZWFkZGlyKERJUik7CisgICAgY2xvc2VkaXIoRElSKTsKKyAgICBmb3JlYWNoIG15ICRmaWxlIChAZmFpbHVyZXMpIHsKKyAgICAgIG9wZW4gSU4sICIkRGlyL2ZhaWx1cmVzLyRmaWxlIiBvciBEaWVEaWFnKCJjYW5ub3Qgb3BlbiAkZmlsZVxuIik7CisgICAgICBteSAkUGF0aCA9IDxJTj47CisgICAgICBpZiAoZGVmaW5lZCAkUGF0aCkgeyBVcGRhdGVQcmVmaXgoJFBhdGgpOyB9CisgICAgICBjbG9zZSBJTjsKKyAgICB9CisgIH0KKworICAjIEdlbmVyYXRlIGFuIGluZGV4Lmh0bWwgZmlsZS4KKyAgbXkgJEZOYW1lID0gIiREaXIvaW5kZXguaHRtbCI7CisgIG9wZW4oT1VULCAiPiIsICRGTmFtZSkgb3IgRGllRGlhZygiQ2Fubm90IGNyZWF0ZSBmaWxlICckRk5hbWUnXG4iKTsKKworICAjIFByaW50IG91dCB0aGUgaGVhZGVyLgorCitwcmludCBPVVQgPDxFTkRURVhUOworPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT4ke09wdGlvbnN7SHRtbFRpdGxlfX08L3RpdGxlPgorPGxpbmsgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic2NhbnZpZXcuY3NzIi8+Cis8c2NyaXB0IHNyYz0ic29ydHRhYmxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQnIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBTZXREaXNwbGF5KFJvd0NsYXNzLCBEaXNwbGF5VmFsKQoreworICB2YXIgUm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOworICBmb3IgKCB2YXIgaSA9IDAgOyBpIDwgUm93cy5sZW5ndGg7ICsraSApIHsKKyAgICBpZiAoUm93c1tpXS5jbGFzc05hbWUgPT0gUm93Q2xhc3MpIHsKKyAgICAgIFJvd3NbaV0uc3R5bGUuZGlzcGxheSA9IERpc3BsYXlWYWw7CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIENvcHlDaGVja2VkU3RhdGVUb0NoZWNrQnV0dG9ucyhTdW1tYXJ5Q2hlY2tCdXR0b24pIHsKKyAgdmFyIElucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOworICBmb3IgKCB2YXIgaSA9IDAgOyBpIDwgSW5wdXRzLmxlbmd0aDsgKytpICkgeworICAgIGlmIChJbnB1dHNbaV0udHlwZSA9PSAiY2hlY2tib3giKSB7CisgICAgICBpZihJbnB1dHNbaV0gIT0gU3VtbWFyeUNoZWNrQnV0dG9uKSB7CisgICAgICAgIElucHV0c1tpXS5jaGVja2VkID0gU3VtbWFyeUNoZWNrQnV0dG9uLmNoZWNrZWQ7CisgICAgICAgIElucHV0c1tpXS5vbmNsaWNrKCk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIHJldHVybk9iakJ5SWQoIGlkICkgeworICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkKKyAgICAgICAgdmFyIHJldHVyblZhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBlbHNlIGlmIChkb2N1bWVudC5hbGwpCisgICAgICAgIHZhciByZXR1cm5WYXIgPSBkb2N1bWVudC5hbGxbaWRdOworICAgIGVsc2UgaWYgKGRvY3VtZW50LmxheWVycykKKyAgICAgICAgdmFyIHJldHVyblZhciA9IGRvY3VtZW50LmxheWVyc1tpZF07CisgICAgcmV0dXJuIHJldHVyblZhcjsKK30KKwordmFyIE51bVVuY2hlY2tlZCA9IDA7CisKK2Z1bmN0aW9uIFRvZ2dsZURpc3BsYXkoQ2hlY2tCdXR0b24sIENsYXNzTmFtZSkgeworICBpZiAoQ2hlY2tCdXR0b24uY2hlY2tlZCkgeworICAgIFNldERpc3BsYXkoQ2xhc3NOYW1lLCAiIik7CisgICAgaWYgKC0tTnVtVW5jaGVja2VkID09IDApIHsKKyAgICAgIHJldHVybk9iakJ5SWQoIkFsbEJ1Z3NDaGVjayIpLmNoZWNrZWQgPSB0cnVlOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBTZXREaXNwbGF5KENsYXNzTmFtZSwgIm5vbmUiKTsKKyAgICBOdW1VbmNoZWNrZWQrKzsKKyAgICByZXR1cm5PYmpCeUlkKCJBbGxCdWdzQ2hlY2siKS5jaGVja2VkID0gZmFsc2U7CisgIH0KK30KKzwvc2NyaXB0PgorPCEtLSBTVU1NQVJZRU5ESEVBRCAtLT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPiR7T3B0aW9uc3tIdG1sVGl0bGV9fTwvaDE+CisKKzx0YWJsZT4KKzx0cj48dGg+VXNlcjo8L3RoPjx0ZD4ke1VzZXJOYW1lfVxAJHtIb3N0TmFtZX08L3RkPjwvdHI+Cis8dHI+PHRoPldvcmtpbmcgRGlyZWN0b3J5OjwvdGg+PHRkPiR7Q3VycmVudERpcn08L3RkPjwvdHI+Cis8dHI+PHRoPkNvbW1hbmQgTGluZTo8L3RoPjx0ZD4ke0NtZEFyZ3N9PC90ZD48L3RyPgorPHRyPjx0aD5DbGFuZyBWZXJzaW9uOjwvdGg+PHRkPiR7Q2xhbmdWZXJzaW9ufTwvdGQ+PC90cj4KKzx0cj48dGg+RGF0ZTo8L3RoPjx0ZD4ke0RhdGV9PC90ZD48L3RyPgorRU5EVEVYVAorCitwcmludCBPVVQgIjx0cj48dGg+VmVyc2lvbjo8L3RoPjx0ZD4ke0J1aWxkTmFtZX0gKCR7QnVpbGREYXRlfSk8L3RkPjwvdHI+XG4iCisgIGlmIChkZWZpbmVkKCRCdWlsZE5hbWUpICYmIGRlZmluZWQoJEJ1aWxkRGF0ZSkpOworCitwcmludCBPVVQgPDxFTkRURVhUOworPC90YWJsZT4KK0VORFRFWFQKKworICBpZiAoc2NhbGFyKEBmaWxlc0ZvdW5kKSkgeworICAgICMgUHJpbnQgb3V0IHRoZSBzdW1tYXJ5IHRhYmxlLgorICAgIG15ICVUb3RhbHM7CisKKyAgICBmb3IgbXkgJHJvdyAoIEBJbmRleCApIHsKKyAgICAgIG15ICRidWdfdHlwZSA9ICgkcm93LT5bMl0pOworICAgICAgbXkgJGJ1Z19jYXRlZ29yeSA9ICgkcm93LT5bMV0pOworICAgICAgbXkgJGtleSA9ICIkYnVnX2NhdGVnb3J5OiRidWdfdHlwZSI7CisKKyAgICAgIGlmICghZGVmaW5lZCAkVG90YWxzeyRrZXl9KSB7ICRUb3RhbHN7JGtleX0gPSBbMSwkYnVnX2NhdGVnb3J5LCRidWdfdHlwZV07IH0KKyAgICAgIGVsc2UgeyAkVG90YWxzeyRrZXl9LT5bMF0rKzsgfQorICAgIH0KKworICAgIHByaW50IE9VVCAiPGgyPkJ1ZyBTdW1tYXJ5PC9oMj4iOworCisgICAgaWYgKGRlZmluZWQgJEJ1aWxkTmFtZSkgeworICAgICAgcHJpbnQgT1VUICJcbjxwPlJlc3VsdHMgaW4gdGhpcyBhbmFseXNpcyBydW4gYXJlIGJhc2VkIG9uIGFuYWx5emVyIGJ1aWxkIDxiPiRCdWlsZE5hbWU8L2I+LjwvcD5cbiIKKyAgICB9CisKKyAgbXkgJFRvdGFsQnVncyA9IHNjYWxhcihASW5kZXgpOworcHJpbnQgT1VUIDw8RU5EVEVYVDsKKzx0YWJsZT4KKzx0aGVhZD48dHI+PHRkPkJ1ZyBUeXBlPC90ZD48dGQ+UXVhbnRpdHk8L3RkPjx0ZCBjbGFzcz0ic29ydHRhYmxlX25vc29ydCI+RGlzcGxheT88L3RkPjwvdHI+PC90aGVhZD4KKzx0ciBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZCI+PHRkIGNsYXNzPSJTVU1NX0RFU0MiPkFsbCBCdWdzPC90ZD48dGQgY2xhc3M9IlEiPiRUb3RhbEJ1Z3M8L3RkPjx0ZD48Y2VudGVyPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IkFsbEJ1Z3NDaGVjayIgb25DbGljaz0iQ29weUNoZWNrZWRTdGF0ZVRvQ2hlY2tCdXR0b25zKHRoaXMpOyIgY2hlY2tlZC8+PC9jZW50ZXI+PC90ZD48L3RyPgorRU5EVEVYVAorCisgICAgbXkgJGxhc3RfY2F0ZWdvcnk7CisKKyAgICBmb3IgbXkgJGtleSAoCisgICAgICBzb3J0IHsKKyAgICAgICAgbXkgJHggPSAkVG90YWxzeyRhfTsKKyAgICAgICAgbXkgJHkgPSAkVG90YWxzeyRifTsKKyAgICAgICAgbXkgJHJlcyA9ICR4LT5bMV0gY21wICR5LT5bMV07CisgICAgICAgICRyZXMgPSAkeC0+WzJdIGNtcCAkeS0+WzJdIGlmICgkcmVzID09IDApOworICAgICAgICAkcmVzCisgICAgICB9IGtleXMgJVRvdGFscyApCisgICAgeworICAgICAgbXkgJHZhbCA9ICRUb3RhbHN7JGtleX07CisgICAgICBteSAkY2F0ZWdvcnkgPSAkdmFsLT5bMV07CisgICAgICBpZiAoIWRlZmluZWQgJGxhc3RfY2F0ZWdvcnkgb3IgJGxhc3RfY2F0ZWdvcnkgbmUgJGNhdGVnb3J5KSB7CisgICAgICAgICRsYXN0X2NhdGVnb3J5ID0gJGNhdGVnb3J5OworICAgICAgICBwcmludCBPVVQgIjx0cj48dGg+JGNhdGVnb3J5PC90aD48dGggY29sc3Bhbj0yPjwvdGg+PC90cj5cbiI7CisgICAgICB9CisgICAgICBteSAkeCA9IGxjICRrZXk7CisgICAgICAkeCA9fiBzL1sgLCciOlwvKCldKy9fL2c7CisgICAgICBwcmludCBPVVQgIjx0cj48dGQgY2xhc3M9XCJTVU1NX0RFU0NcIj4iOworICAgICAgcHJpbnQgT1VUICR2YWwtPlsyXTsKKyAgICAgIHByaW50IE9VVCAiPC90ZD48dGQgY2xhc3M9XCJRXCI+IjsKKyAgICAgIHByaW50IE9VVCAkdmFsLT5bMF07CisgICAgICBwcmludCBPVVQgIjwvdGQ+PHRkPjxjZW50ZXI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG9uQ2xpY2s9XCJUb2dnbGVEaXNwbGF5KHRoaXMsJ2J0XyR4Jyk7XCIgY2hlY2tlZC8+PC9jZW50ZXI+PC90ZD48L3RyPlxuIjsKKyAgICB9CisKKyAgIyBQcmludCBvdXQgdGhlIHRhYmxlIG9mIGVycm9ycy4KKworcHJpbnQgT1VUIDw8RU5EVEVYVDsKKzwvdGFibGU+Cis8aDI+UmVwb3J0czwvaDI+CisKKzx0YWJsZSBjbGFzcz0ic29ydGFibGUiIHN0eWxlPSJ0YWJsZS1sYXlvdXQ6YXV0b21hdGljIj4KKzx0aGVhZD48dHI+CisgIDx0ZD5CdWcgR3JvdXA8L3RkPgorICA8dGQgY2xhc3M9InNvcnR0YWJsZV9zb3J0ZWQiPkJ1ZyBUeXBlPHNwYW4gaWQ9InNvcnR0YWJsZV9zb3J0ZndkaW5kIj4mbmJzcDsmI3gyNUJFOzwvc3Bhbj48L3RkPgorICA8dGQ+RmlsZTwvdGQ+CisgIDx0ZD5GdW5jdGlvbi9NZXRob2Q8L3RkPgorICA8dGQgY2xhc3M9IlEiPkxpbmU8L3RkPgorICA8dGQgY2xhc3M9IlEiPlBhdGggTGVuZ3RoPC90ZD4KKyAgPHRkIGNsYXNzPSJzb3J0dGFibGVfbm9zb3J0Ij48L3RkPgorICA8IS0tIFJFUE9SVEJVR0NPTCAtLT4KKzwvdHI+PC90aGVhZD4KKzx0Ym9keT4KK0VORFRFWFQKKworICAgIG15ICRwcmVmaXggPSBHZXRQcmVmaXgoKTsKKyAgICBteSAkcmVnZXg7CisgICAgbXkgJEluRmlsZVJlZ2V4OworICAgIG15ICRJbkZpbGVQcmVmaXggPSAiRmlsZTo8L3RkPjx0ZD4iOworCisgICAgaWYgKGRlZmluZWQgJHByZWZpeCkgeworICAgICAgJHJlZ2V4ID0gcXIvXlxRJHByZWZpeFxFL2lzOworICAgICAgJEluRmlsZVJlZ2V4ID0gcXIvXFEkSW5GaWxlUHJlZml4JHByZWZpeFxFL2lzOworICAgIH0KKworICAgIGZvciBteSAkcm93ICggc29ydCB7ICRhLT5bMl0gY21wICRiLT5bMl0gfSBASW5kZXggKSB7CisgICAgICBteSAkeCA9ICIkcm93LT5bMV06JHJvdy0+WzJdIjsKKyAgICAgICR4ID0gbGMgJHg7CisgICAgICAkeCA9fiBzL1sgLCciOlwvKCldKy9fL2c7CisKKyAgICAgIG15ICRSZXBvcnRGaWxlID0gJHJvdy0+WzBdOworCisgICAgICBwcmludCBPVVQgIjx0ciBjbGFzcz1cImJ0XyR4XCI+IjsKKyAgICAgIHByaW50IE9VVCAiPHRkIGNsYXNzPVwiREVTQ1wiPiI7CisgICAgICBwcmludCBPVVQgJHJvdy0+WzFdOworICAgICAgcHJpbnQgT1VUICI8L3RkPiI7CisgICAgICBwcmludCBPVVQgIjx0ZCBjbGFzcz1cIkRFU0NcIj4iOworICAgICAgcHJpbnQgT1VUICRyb3ctPlsyXTsKKyAgICAgIHByaW50IE9VVCAiPC90ZD4iOworCisgICAgICAjIFVwZGF0ZSB0aGUgZmlsZSBwcmVmaXguCisgICAgICBteSAkZm5hbWUgPSAkcm93LT5bM107CisKKyAgICAgIGlmIChkZWZpbmVkICRyZWdleCkgeworICAgICAgICAkZm5hbWUgPX4gcy8kcmVnZXgvLzsKKyAgICAgICAgVXBkYXRlSW5GaWxlUGF0aCgiJERpci8kUmVwb3J0RmlsZSIsICRJbkZpbGVSZWdleCwgJEluRmlsZVByZWZpeCkKKyAgICAgIH0KKworICAgICAgcHJpbnQgT1VUICI8dGQ+IjsKKyAgICAgIG15IEBmbmFtZSA9IHNwbGl0IC9cLy8sJGZuYW1lOworICAgICAgaWYgKCQjZm5hbWUgPiAwKSB7CisgICAgICAgIHdoaWxlICgkI2ZuYW1lID49IDApIHsKKyAgICAgICAgICBteSAkeCA9IHNoaWZ0IEBmbmFtZTsKKyAgICAgICAgICBwcmludCBPVVQgJHg7CisgICAgICAgICAgaWYgKCQjZm5hbWUgPj0gMCkgeworICAgICAgICAgICAgcHJpbnQgT1VUICIvIjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBwcmludCBPVVQgJGZuYW1lOworICAgICAgfQorICAgICAgcHJpbnQgT1VUICI8L3RkPiI7CisKKyAgICAgIHByaW50IE9VVCAiPHRkIGNsYXNzPVwiREVTQ1wiPiI7CisgICAgICBwcmludCBPVVQgJHJvdy0+WzRdOworICAgICAgcHJpbnQgT1VUICI8L3RkPiI7CisKKyAgICAgICMgUHJpbnQgb3V0IHRoZSBxdWFudGl0aWVzLgorICAgICAgZm9yIG15ICRqICggNSAuLiA2ICkgeworICAgICAgICBwcmludCBPVVQgIjx0ZCBjbGFzcz1cIlFcIj4kcm93LT5bJGpdPC90ZD4iOworICAgICAgfQorCisgICAgICAjIFByaW50IHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zLgorICAgICAgZm9yIChteSAkaiA9IDc7ICRqIDw9ICQjeyRyb3d9OyArKyRqKSB7CisgICAgICAgIHByaW50IE9VVCAiPHRkPiRyb3ctPlskal08L3RkPiIKKyAgICAgIH0KKworICAgICAgIyBFbWl0IHRoZSAiVmlldyIgbGluay4KKyAgICAgIHByaW50IE9VVCAiPHRkPjxhIGhyZWY9XCIkUmVwb3J0RmlsZSNFbmRQYXRoXCI+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+IDAgJiYgLXIgIiREaXIvaW5kZXguaHRtbCIpIHsKKyAgICBEaWFnKCJSdW4gJ3NjYW4tdmlldyAkRGlyJyB0byBleGFtaW5lIGJ1ZyByZXBvcnRzLlxuIik7CisgIH0KKworICBEaWFnQ3Jhc2hlcygkRGlyKSBpZiAoc2NhbGFyIEBmYWlsdXJlcyB8fCBzY2FsYXIgQGF0dHJpYnV0ZXNfaWdub3JlZCk7CisKKyAgcmV0dXJuICROdW07Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFJ1bkJ1aWxkQ29tbWFuZCAtIFJ1biB0aGUgYnVpbGQgY29tbWFuZC4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBBZGRJZk5vdFByZXNlbnQgeworICBteSAkQXJncyA9IHNoaWZ0OworICBteSAkQXJnID0gc2hpZnQ7CisgIG15ICRmb3VuZCA9IDA7CisKKyAgZm9yZWFjaCBteSAkayAoQCRBcmdzKSB7CisgICAgaWYgKCRrIGVxICRBcmcpIHsKKyAgICAgICRmb3VuZCA9IDE7CisgICAgICBsYXN0OworICAgIH0KKyAgfQorCisgIGlmICgkZm91bmQgPT0gMCkgeworICAgIHB1c2ggQCRBcmdzLCAkQXJnOworICB9Cit9CisKK3N1YiBTZXRFbnYgeworICBteSAkRW52VmFycyA9IHNoaWZ0IEBfOworICBmb3JlYWNoIG15ICR2YXIgKCdDQycsICdDWFgnLCAnQ0xBTkcnLCAnQ0xBTkdfQ1hYJywKKyAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0FOQUxZU0lTJywgJ0NDQ19BTkFMWVpFUl9QTFVHSU5TJywKKyAgICAgICAgICAgICAgICAgICAnQ0NDX0FOQUxZWkVSX0NPTkZJRycpIHsKKyAgICBkaWUgIiR2YXIgaXMgdW5kZWZpbmVkXG4iIGlmICghZGVmaW5lZCAkdmFyKTsKKyAgICAkRU5WeyR2YXJ9ID0gJEVudlZhcnMtPnskdmFyfTsKKyAgfQorICBmb3JlYWNoIG15ICR2YXIgKCdDQ0NfQU5BTFlaRVJfU1RPUkVfTU9ERUwnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfQ09OU1RSQUlOVFNfTU9ERUwnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfSU5URVJOQUxfU1RBVFMnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfQU5BTFlaRVJfT1VUUFVUX0ZPUk1BVCcsCisgICAgICAgICAgICAgICAgICAgJ0NDQ19DQycsCisgICAgICAgICAgICAgICAgICAgJ0NDQ19DWFgnLAorICAgICAgICAgICAgICAgICAgICdDQ0NfUkVQT1JUX0ZBSUxVUkVTJywKKyAgICAgICAgICAgICAgICAgICAnQ0xBTkdfQU5BTFlaRVJfVEFSR0VUJykgeworICAgIG15ICR4ID0gJEVudlZhcnMtPnskdmFyfTsKKyAgICBpZiAoZGVmaW5lZCAkeCkgeyAkRU5WeyR2YXJ9ID0gJHggfQorICB9CisgIG15ICRWZXJib3NlID0gJEVudlZhcnMtPnsnVkVSQk9TRSd9OworICBpZiAoJFZlcmJvc2UgPj0gMikgeworICAgICRFTlZ7J0NDQ19BTkFMWVpFUl9WRVJCT1NFJ30gPSAxOworICB9CisgIGlmICgkVmVyYm9zZSA+PSAzKSB7CisgICAgJEVOVnsnQ0NDX0FOQUxZWkVSX0xPRyd9ID0gMTsKKyAgfQorfQorCitzdWIgUnVuWGNvZGVidWlsZCB7CisgIG15ICRBcmdzID0gc2hpZnQ7CisgIG15ICRJZ25vcmVFcnJvcnMgPSBzaGlmdDsKKyAgbXkgJENDQW5hbHl6ZXIgPSBzaGlmdDsKKyAgbXkgJENYWEFuYWx5emVyID0gc2hpZnQ7CisgIG15ICRFbnZWYXJzID0gc2hpZnQ7CisKKyAgaWYgKCRJZ25vcmVFcnJvcnMpIHsKKyAgICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsIi1QQlhCdWlsZHNDb250aW51ZUFmdGVyRXJyb3JzPVlFUyIpOworICB9CisKKyAgIyBEZXRlY3QgdGhlIHZlcnNpb24gb2YgWGNvZGUuICBJZiBYY29kZSA0LjYgb3IgaGlnaGVyLCB1c2UgbmV3CisgICMgaW4gc2l0dSBzdXBwb3J0IGZvciBhbmFseXplciBpbnRlcnBvc2l0aW9uIHdpdGhvdXQgbmVlZGVkIHRvIG92ZXJyaWRlCisgICMgdGhlIGNvbXBpbGVyLgorICBvcGVuKERFVEVDVF9YQ09ERSwgIi18IiwgJEFyZ3MtPlswXSwgIi12ZXJzaW9uIikgb3IKKyAgICBkaWUgImVycm9yOiBjYW5ub3QgZGV0ZWN0IHZlcnNpb24gb2YgeGNvZGVidWlsZFxuIjsKKworICBteSAkb2xkQmVoYXZpb3IgPSAxOworCisgIHdoaWxlKDxERVRFQ1RfWENPREU+KSB7CisgICAgaWYgKC9eWGNvZGUgKC4rKSQvKSB7CisgICAgICBteSAkdmVyID0gJDE7CisgICAgICBpZiAoJHZlciA9fiAvXihbMC05XStbLl1bMC05XSspW14wLTldPy8pIHsKKyAgICAgICAgaWYgKCQxID49IDQuNikgeworICAgICAgICAgICRvbGRCZWhhdmlvciA9IDA7CisgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBjbG9zZShERVRFQ1RfWENPREUpOworCisgICMgSWYgLS1vdmVycmlkZS1jb21waWxlciBpcyBleHBsaWNpdGVseSByZXF1ZXN0ZWQsIHJlc29ydCB0byB0aGUgb2xkCisgICMgYmVoYXZpb3IgcmVnYXJkbGVzcyBvZiBYY29kZSB2ZXJzaW9uLgorICBpZiAoJE9wdGlvbnN7T3ZlcnJpZGVDb21waWxlcn0pIHsKKyAgICAkb2xkQmVoYXZpb3IgPSAxOworICB9CisKKyAgaWYgKCRvbGRCZWhhdmlvciA9PSAwKSB7CisgICAgbXkgJE91dHB1dERpciA9ICRFbnZWYXJzLT57Ik9VVFBVVF9ESVIifTsKKyAgICBteSAkQ0xBTkcgPSAkRW52VmFycy0+eyJDTEFORyJ9OworICAgIG15ICRPdGhlckZsYWdzID0gJEVudlZhcnMtPnsiQ0NDX0FOQUxZWkVSX0FOQUxZU0lTIn07CisgICAgcHVzaCBAJEFyZ3MsCisgICAgICAgICJSVU5fQ0xBTkdfU1RBVElDX0FOQUxZWkVSPVlFUyIsCisgICAgICAgICJDTEFOR19BTkFMWVpFUl9PVVRQVVQ9cGxpc3QtaHRtbCIsCisgICAgICAgICJDTEFOR19BTkFMWVpFUl9FWEVDPSRDTEFORyIsCisgICAgICAgICJDTEFOR19BTkFMWVpFUl9PVVRQVVRfRElSPSRPdXRwdXREaXIiLAorICAgICAgICAiQ0xBTkdfQU5BTFlaRVJfT1RIRVJfRkxBR1M9JE90aGVyRmxhZ3MiOworCisgICAgcmV0dXJuIChzeXN0ZW0oQCRBcmdzKSA+PiA4KTsKKyAgfQorCisgICMgRGVmYXVsdCB0byBvbGQgYmVoYXZpb3Igd2hlcmUgd2UgaW5zZXJ0IGEgYm9ndXMgY29tcGlsZXIuCisgIFNldEVudigkRW52VmFycyk7CisKKyAgIyBDaGVjayBpZiB1c2luZyBpUGhvbmUgU0RLIDMuMCAoc2ltdWxhdG9yKS4gIElmIHNvIHRoZSBjb21waWxlciBiZWluZworICAjIHVzZWQgc2hvdWxkIGJlIGdjYy00LjIuCisgIGlmICghZGVmaW5lZCAkRU5WeyJDQ0NfQ0MifSkgeworICAgIGZvciAobXkgJGkgPSAwIDsgJGkgPCBzY2FsYXIoQCRBcmdzKTsgKyskaSkgeworICAgICAgaWYgKCRBcmdzLT5bJGldIGVxICItc2RrIiAmJiAkaSArIDEgPCBzY2FsYXIoQCRBcmdzKSkgeworICAgICAgICBpZiAoQCRBcmdzWyRpKzFdID1+IC9eaXBob25lc2ltdWxhdG9yMy8pIHsKKyAgICAgICAgICAkRU5WeyJDQ0NfQ0MifSA9ICJnY2MtNC4yIjsKKyAgICAgICAgICAkRU5WeyJDQ0NfQ1hYIn0gPSAiZysrLTQuMiI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICAjIERpc2FibGUgUENIIGZpbGVzIHVudGlsIGNsYW5nIHN1cHBvcnRzIHRoZW0uCisgIEFkZElmTm90UHJlc2VudCgkQXJncywiR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUj1OTyIpOworCisgICMgV2hlbiAnQ0MnIGlzIHNldCwgeGNvZGVidWlsZCB1c2VzIGl0IHRvIGRvIGFsbCBsaW5raW5nLCBldmVuIGlmIHdlIGFyZQorICAjIGxpbmtpbmcgQysrIG9iamVjdCBmaWxlcy4gIFNldCAnTERQTFVTUExVUycgc28gdGhhdCB4Y29kZWJ1aWxkIHVzZXMgJ2crKycKKyAgIyAodmlhIGMrKy1hbmFseXplcikgd2hlbiBsaW5raW5nIHN1Y2ggZmlsZXMuCisgICRFTlZ7IkxEUExVU1BMVVMifSA9ICRDWFhBbmFseXplcjsKKworICByZXR1cm4gKHN5c3RlbShAJEFyZ3MpID4+IDgpOworfQorCitzdWIgUnVuQnVpbGRDb21tYW5kIHsKKyAgbXkgJEFyZ3MgPSBzaGlmdDsKKyAgbXkgJElnbm9yZUVycm9ycyA9IHNoaWZ0OworICBteSAkQ21kID0gJEFyZ3MtPlswXTsKKyAgbXkgJENDQW5hbHl6ZXIgPSBzaGlmdDsKKyAgbXkgJENYWEFuYWx5emVyID0gc2hpZnQ7CisgIG15ICRFbnZWYXJzID0gc2hpZnQ7CisKKyAgaWYgKCRDbWQgPX4gL1xieGNvZGVidWlsZCQvKSB7CisgICAgcmV0dXJuIFJ1blhjb2RlYnVpbGQoJEFyZ3MsICRJZ25vcmVFcnJvcnMsICRDQ0FuYWx5emVyLCAkQ1hYQW5hbHl6ZXIsICRFbnZWYXJzKTsKKyAgfQorCisgICMgU2V0dXAgdGhlIGVudmlyb25tZW50LgorICBTZXRFbnYoJEVudlZhcnMpOworCisgIGlmICgkQ21kID1+IC8oLipcLz9nY2NbXlwvXSokKS8gb3IKKyAgICAgICRDbWQgPX4gLyguKlwvP2NjW15cL10qJCkvIG9yCisgICAgICAkQ21kID1+IC8oLipcLz9sbHZtLWdjY1teXC9dKiQpLyBvcgorICAgICAgJENtZCA9fiAvKC4qXC8/Y2xhbmckKS8gb3IKKyAgICAgICRDbWQgPX4gLyguKlwvP2NjYy1hbmFseXplclteXC9dKiQpLykgeworCisgICAgaWYgKCEoJENtZCA9fiAvY2NjLWFuYWx5emVyLykgYW5kICFkZWZpbmVkICRFTlZ7IkNDQ19DQyJ9KSB7CisgICAgICAkRU5WeyJDQ0NfQ0MifSA9ICQxOworICAgIH0KKworICAgIHNoaWZ0IEAkQXJnczsKKyAgICB1bnNoaWZ0IEAkQXJncywgJENDQW5hbHl6ZXI7CisgIH0KKyAgZWxzaWYgKCRDbWQgPX4gLyguKlwvP2dcK1wrW15cL10qJCkvIG9yCisgICAgICAgICRDbWQgPX4gLyguKlwvP2NcK1wrW15cL10qJCkvIG9yCisgICAgICAgICRDbWQgPX4gLyguKlwvP2xsdm0tZ1wrXCtbXlwvXSokKS8gb3IKKyAgICAgICAgJENtZCA9fiAvKC4qXC8/Y2xhbmdcK1wrJCkvIG9yCisgICAgICAgICRDbWQgPX4gLyguKlwvP2NcK1wrLWFuYWx5emVyW15cL10qJCkvKSB7CisgICAgaWYgKCEoJENtZCA9fiAvY1wrXCstYW5hbHl6ZXIvKSBhbmQgIWRlZmluZWQgJEVOVnsiQ0NDX0NYWCJ9KSB7CisgICAgICAkRU5WeyJDQ0NfQ1hYIn0gPSAkMTsKKyAgICB9CisgICAgc2hpZnQgQCRBcmdzOworICAgIHVuc2hpZnQgQCRBcmdzLCAkQ1hYQW5hbHl6ZXI7CisgIH0KKyAgZWxzaWYgKCRDbWQgZXEgIm1ha2UiIG9yICRDbWQgZXEgImdtYWtlIiBvciAkQ21kIGVxICJtaW5ndzMyLW1ha2UiKSB7CisgICAgQWRkSWZOb3RQcmVzZW50KCRBcmdzLCAiQ0M9JENDQW5hbHl6ZXIiKTsKKyAgICBBZGRJZk5vdFByZXNlbnQoJEFyZ3MsICJDWFg9JENYWEFuYWx5emVyIik7CisgICAgaWYgKCRJZ25vcmVFcnJvcnMpIHsKKyAgICAgIEFkZElmTm90UHJlc2VudCgkQXJncywiLWsiKTsKKyAgICAgIEFkZElmTm90UHJlc2VudCgkQXJncywiLWkiKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gKHN5c3RlbShAJEFyZ3MpID4+IDgpOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyBEaXNwbGF5SGVscCAtIFV0aWxpdHkgZnVuY3Rpb24gdG8gZGlzcGxheSBhbGwgaGVscCBvcHRpb25zLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIERpc3BsYXlIZWxwIHsKKworICBteSAkQXJnQ2xhbmdOb3RGb3VuZEVyck1zZyA9IHNoaWZ0OworcHJpbnQgPDxFTkRURVhUOworVVNBR0U6ICRQcm9nIFtvcHRpb25zXSA8YnVpbGQgY29tbWFuZD4gW2J1aWxkIG9wdGlvbnNdCisKK0VORFRFWFQKKworICBpZiAoZGVmaW5lZCAkQnVpbGROYW1lKSB7CisgICAgcHJpbnQgIkFOQUxZWkVSIEJVSUxEOiAkQnVpbGROYW1lICgkQnVpbGREYXRlKVxuXG4iOworICB9CisKK3ByaW50IDw8RU5EVEVYVDsKK09QVElPTlM6CisKKyAtYW5hbHl6ZS1oZWFkZXJzCisKKyAgIEFsc28gYW5hbHl6ZSBmdW5jdGlvbnMgaW4gI2luY2x1ZGVkIGZpbGVzLiAgQnkgZGVmYXVsdCwgc3VjaCBmdW5jdGlvbnMKKyAgIGFyZSBza2lwcGVkIHVubGVzcyB0aGV5IGFyZSBjYWxsZWQgYnkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbWFpbiBzb3VyY2UgZmlsZS4KKworIC1vIDxvdXRwdXQgbG9jYXRpb24+CisKKyAgIFNwZWNpZmllcyB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgYW5hbHl6ZXIgcmVwb3J0cy4gU3ViZGlyZWN0b3JpZXMgd2lsbCBiZQorICAgY3JlYXRlZCBhcyBuZWVkZWQgdG8gcmVwcmVzZW50IHNlcGFyYXRlICJydW5zIiBvZiB0aGUgYW5hbHl6ZXIuIElmIHRoaXMKKyAgIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCBhIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGluIC90bXAgKFRNUERJUiBvbiBNYWMgT1MgWCkKKyAgIHRvIHN0b3JlIHRoZSByZXBvcnRzLgorCisgLWgKKyAtLWhlbHAKKworICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UuCisKKyAtaworIC0ta2VlcC1nb2luZworCisgICBBZGQgYSAia2VlcCBvbiBnb2luZyIgb3B0aW9uIHRvIHRoZSBzcGVjaWZpZWQgYnVpbGQgY29tbWFuZC4gVGhpcyBvcHRpb24KKyAgIGN1cnJlbnRseSBzdXBwb3J0cyBtYWtlIGFuZCB4Y29kZWJ1aWxkLiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugb3B0aW9uOyBvbmUKKyAgIGNhbiBzcGVjaWZ5IHRoaXMgYmVoYXZpb3IgZGlyZWN0bHkgdXNpbmcgYnVpbGQgb3B0aW9ucy4KKworIC0taHRtbC10aXRsZSBbdGl0bGVdCisgLS1odG1sLXRpdGxlPVt0aXRsZV0KKworICAgU3BlY2lmeSB0aGUgdGl0bGUgdXNlZCBvbiBnZW5lcmF0ZWQgSFRNTCBwYWdlcy4gSWYgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0CisgICB0aXRsZSB3aWxsIGJlIHVzZWQuCisKKyAtcGxpc3QKKworICAgQnkgZGVmYXVsdCB0aGUgb3V0cHV0IG9mIHNjYW4tYnVpbGQgaXMgYSBzZXQgb2YgSFRNTCBmaWxlcy4gVGhpcyBvcHRpb24KKyAgIG91dHB1dHMgdGhlIHJlc3VsdHMgYXMgYSBzZXQgb2YgLnBsaXN0IGZpbGVzLgorCisgLXBsaXN0LWh0bWwKKworICAgQnkgZGVmYXVsdCB0aGUgb3V0cHV0IG9mIHNjYW4tYnVpbGQgaXMgYSBzZXQgb2YgSFRNTCBmaWxlcy4gVGhpcyBvcHRpb24KKyAgIG91dHB1dHMgdGhlIHJlc3VsdHMgYXMgYSBzZXQgb2YgSFRNTCBhbmQgLnBsaXN0IGZpbGVzLgorCisgLS1zdGF0dXMtYnVncworCisgICBCeSBkZWZhdWx0LCB0aGUgZXhpdCBzdGF0dXMgb2Ygc2Nhbi1idWlsZCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhlY3V0ZWQgYnVpbGQKKyAgIGNvbW1hbmQuIFNwZWNpZnlpbmcgdGhpcyBvcHRpb24gY2F1c2VzIHRoZSBleGl0IHN0YXR1cyBvZiBzY2FuLWJ1aWxkIHRvIGJlIDEKKyAgIGlmIGl0IGZvdW5kIHBvdGVudGlhbCBidWdzIGFuZCAwIG90aGVyd2lzZS4KKworIC0tdXNlLWNjIFtjb21waWxlciBwYXRoXQorIC0tdXNlLWNjPVtjb21waWxlciBwYXRoXQorCisgICBzY2FuLWJ1aWxkIGFuYWx5emVzIGEgcHJvamVjdCBieSBpbnRlcnBvc2luZyBhICJmYWtlIGNvbXBpbGVyIiwgd2hpY2gKKyAgIGV4ZWN1dGVzIGEgcmVhbCBjb21waWxlciBmb3IgY29tcGlsYXRpb24gYW5kIHRoZSBzdGF0aWMgYW5hbHl6ZXIgZm9yIGFuYWx5c2lzLgorICAgQmVjYXVzZSBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBpbnRlcnBvc2l0aW9uLCBzY2FuLWJ1aWxkIGRvZXMgbm90CisgICBrbm93IHdoYXQgY29tcGlsZXIgeW91ciBwcm9qZWN0IG5vcm1hbGx5IHVzZXMuICBJbnN0ZWFkLCBpdCBzaW1wbHkgb3ZlcnJpZGVzCisgICB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsIGFuZCBndWVzc2VzIHlvdXIgZGVmYXVsdCBjb21waWxlci4KKworICAgSW4gdGhlIGZ1dHVyZSwgdGhpcyBpbnRlcnBvc2l0aW9uIG1lY2hhbmlzbSB0byBiZSBpbXByb3ZlZCwgYnV0IGlmIHlvdSBuZWVkCisgICBzY2FuLWJ1aWxkIHRvIHVzZSBhIHNwZWNpZmljIGNvbXBpbGVyIGZvciAqY29tcGlsYXRpb24qIHRoZW4geW91IGNhbiB1c2UKKyAgIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgYSBwYXRoIHRvIHRoYXQgY29tcGlsZXIuCisKKyAgIElmIHRoZSBnaXZlbiBjb21waWxlciBpcyBhIGNyb3NzIGNvbXBpbGVyLCB5b3UgbWF5IGFsc28gbmVlZCB0byBwcm92aWRlCisgICAtLWFuYWx5emVyLXRhcmdldCBvcHRpb24gdG8gcHJvcGVybHkgYW5hbHl6ZSB0aGUgc291cmNlIGNvZGUgYmVjYXVzZSBzdGF0aWMKKyAgIGFuYWx5emVyIHJ1bnMgYXMgaWYgdGhlIGNvZGUgaXMgY29tcGlsZWQgZm9yIHRoZSBob3N0IG1hY2hpbmUgYnkgZGVmYXVsdC4KKworIC0tdXNlLWMrKyBbY29tcGlsZXIgcGF0aF0KKyAtLXVzZS1jKys9W2NvbXBpbGVyIHBhdGhdCisKKyAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgIi0tdXNlLWNjIiBidXQgZm9yIEMrKyBjb2RlLgorCisgLS1hbmFseXplci10YXJnZXQgW3RhcmdldCB0cmlwbGUgbmFtZSBmb3IgYW5hbHlzaXNdCisgLS1hbmFseXplci10YXJnZXQ9W3RhcmdldCB0cmlwbGUgbmFtZSBmb3IgYW5hbHlzaXNdCisKKyAgIFRoaXMgcHJvdmlkZXMgdGFyZ2V0IHRyaXBsZSBpbmZvcm1hdGlvbiB0byBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIuCisgICBJdCBvbmx5IGNoYW5nZXMgdGhlIHRhcmdldCBmb3IgYW5hbHlzaXMgYnV0IGRvZXNuJ3QgY2hhbmdlIHRoZSB0YXJnZXQgb2YgYQorICAgcmVhbCBjb21waWxlciBnaXZlbiBieSAtLXVzZS1jYyBhbmQgLS11c2UtYysrIG9wdGlvbnMuCisKKyAtdgorCisgICBFbmFibGUgdmVyYm9zZSBvdXRwdXQgZnJvbSBzY2FuLWJ1aWxkLiBBIHNlY29uZCBhbmQgdGhpcmQgJy12JyBpbmNyZWFzZXMKKyAgIHZlcmJvc2l0eS4KKworIC1WCisgLS12aWV3CisKKyAgIFZpZXcgYW5hbHlzaXMgcmVzdWx0cyBpbiBhIHdlYiBicm93c2VyIHdoZW4gdGhlIGJ1aWxkIGNvbXBsZXRlcy4KKworQURWQU5DRUQgT1BUSU9OUzoKKworIC1uby1mYWlsdXJlLXJlcG9ydHMKKworICAgRG8gbm90IGNyZWF0ZSBhICdmYWlsdXJlcycgc3ViZGlyZWN0b3J5IHRoYXQgaW5jbHVkZXMgYW5hbHl6ZXIgY3Jhc2ggcmVwb3J0cworICAgYW5kIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKKyAtc3RhdHMKKworICAgR2VuZXJhdGVzIHZpc2l0YXRpb24gc3RhdGlzdGljcyBmb3IgdGhlIHByb2plY3QgYmVpbmcgYW5hbHl6ZWQuCisKKyAtbWF4bG9vcCA8bG9vcCBjb3VudD4KKworICAgU3BlY2lmaXkgdGhlIG51bWJlciBvZiB0aW1lcyBhIGJsb2NrIGNhbiBiZSB2aXNpdGVkIGJlZm9yZSBnaXZpbmcgdXAuCisgICBEZWZhdWx0IGlzIDQuIEluY3JlYXNlIGZvciBtb3JlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UgYXQgYSBjb3N0IG9mIHNwZWVkLgorCisgLWludGVybmFsLXN0YXRzCisKKyAgIEdlbmVyYXRlIGludGVybmFsIGFuYWx5emVyIHN0YXRpc3RpY3MuCisKKyAtLXVzZS1hbmFseXplciBbWGNvZGV8cGF0aCB0byBjbGFuZ10KKyAtLXVzZS1hbmFseXplcj1bWGNvZGV8cGF0aCB0byBjbGFuZ10KKworICAgc2Nhbi1idWlsZCB1c2VzIHRoZSAnY2xhbmcnIGV4ZWN1dGFibGUgcmVsYXRpdmUgdG8gaXRzZWxmIGZvciBzdGF0aWMKKyAgIGFuYWx5c2lzLiBPbmUgY2FuIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3Igd2l0aCB0aGlzIG9wdGlvbiBieSB1c2luZyB0aGUKKyAgICdjbGFuZycgcGFja2FnZWQgd2l0aCBYY29kZSAob24gT1MgWCkgb3IgZnJvbSB0aGUgUEFUSC4KKworIC0ta2VlcC1lbXB0eQorCisgICBEb24ndCByZW1vdmUgdGhlIGJ1aWxkIHJlc3VsdHMgZGlyZWN0b3J5IGV2ZW4gaWYgbm8gaXNzdWVzIHdlcmUgcmVwb3J0ZWQuCisKKyAtLW92ZXJyaWRlLWNvbXBpbGVyCisgICBBbHdheXMgcmVzb3J0IHRvIHRoZSBjY2MtYW5hbHl6ZXIgZXZlbiB3aGVuIGJldHRlciBpbnRlcnBvc2l0aW9uIG1ldGhvZHMKKyAgIGFyZSBhdmFpbGFibGUuCisKKyAtYW5hbHl6ZXItY29uZmlnIDxvcHRpb25zPgorCisgICBQcm92aWRlIG9wdGlvbnMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBhbmFseXplcidzIC1hbmFseXplci1jb25maWcgZmxhZy4KKyAgIFNldmVyYWwgb3B0aW9ucyBhcmUgc2VwYXJhdGVkIHdpdGggY29tbWE6ICdrZXkxPXZhbDEsa2V5Mj12YWwyJworCisgICBBdmFpbGFibGUgb3B0aW9uczoKKyAgICAgKiBzdGFibGUtcmVwb3J0LWZpbGVuYW1lPXRydWUgb3IgZmFsc2UgKGRlZmF1bHQpCisgICAgICAgU3dpdGNoIHRoZSBwYWdlIG5hbWluZyB0bzoKKyAgICAgICByZXBvcnQtPGZpbGVuYW1lPi08ZnVuY3Rpb24vbWV0aG9kIG5hbWU+LTxpZD4uaHRtbAorICAgICAgIGluc3RlYWQgb2YgcmVwb3J0LVhYWFhYWC5odG1sCisKK0NPTlRST0xMSU5HIENIRUNLRVJTOgorCisgQSBkZWZhdWx0IGdyb3VwIG9mIGNoZWNrZXJzIGFyZSBhbHdheXMgcnVuIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkLgorIENoZWNrZXJzIG1heSBiZSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworIC1lbmFibGUtY2hlY2tlciBbY2hlY2tlciBuYW1lXQorIC1kaXNhYmxlLWNoZWNrZXIgW2NoZWNrZXIgbmFtZV0KKworTE9BRElORyBDSEVDS0VSUzoKKworIExvYWRpbmcgZXh0ZXJuYWwgY2hlY2tlcnMgdXNpbmcgdGhlIGNsYW5nIHBsdWdpbiBpbnRlcmZhY2U6CisKKyAtbG9hZC1wbHVnaW4gW3BsdWdpbiBsaWJyYXJ5XQorRU5EVEVYVAorCisgIGlmIChkZWZpbmVkICRDbGFuZyAmJiAteCAkQ2xhbmcpIHsKKyAgICAjIFF1ZXJ5IGNsYW5nIGZvciBsaXN0IG9mIGNoZWNrZXJzIHRoYXQgYXJlIGVuYWJsZWQuCisKKyAgICAjIGNyZWF0ZSBhIGxpc3QgdG8gbG9hZCB0aGUgcGx1Z2lucyB2aWEgdGhlICdYY2xhbmcnIGNvbW1hbmQgbGluZQorICAgICMgYXJndW1lbnQKKyAgICBteSBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZzsKKyAgICBmb3JlYWNoIG15ICRwYXJhbSAoIEB7JE9wdGlvbnN7UGx1Z2luc1RvTG9hZH19ICkgeworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nLCAiLVhjbGFuZyIgKTsKKyAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZywgIi1sb2FkIiApOworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nLCAiLVhjbGFuZyIgKTsKKyAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lX3hjbGFuZywgJHBhcmFtICk7CisgICAgfQorCisgICAgbXkgJUVuYWJsZWRDaGVja2VyczsKKyAgICBmb3JlYWNoIG15ICRsYW5nICgiYyIsICJvYmplY3RpdmUtYyIsICJvYmplY3RpdmUtYysrIiwgImMrKyIpIHsKKyAgICAgIG15ICRFeGVjTGluZSA9IGpvaW4oJyAnLCBxcS8iJENsYW5nIi8sIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmVfeGNsYW5nLCAiLS1hbmFseXplIiwgIi14IiwgJGxhbmcsICItIiwgIi0jIyMiLCAiMj4mMSIsICJ8Iik7CisgICAgICBvcGVuKFBTLCAkRXhlY0xpbmUpOworICAgICAgd2hpbGUgKDxQUz4pIHsKKyAgICAgICAgZm9yZWFjaCBteSAkdmFsIChzcGxpdCAvXHMrLykgeworICAgICAgICAgICR2YWwgPX4gcy9cIi8vZzsKKyAgICAgICAgICBpZiAoJHZhbCA9fiAvLWFuYWx5emVyLWNoZWNrZXJcPShbXlxzXSspLykgeworICAgICAgICAgICAgJEVuYWJsZWRDaGVja2Vyc3skMX0gPSAxOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgICMgUXVlcnkgY2xhbmcgZm9yIGNvbXBsZXRlIGxpc3Qgb2YgY2hlY2tlcnMuCisgICAgbXkgQFBsdWdpbkxvYWRDb21tYW5kbGluZTsKKyAgICBmb3JlYWNoIG15ICRwYXJhbSAoIEB7JE9wdGlvbnN7UGx1Z2luc1RvTG9hZH19ICkgeworICAgICAgcHVzaCAoIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmUsICItbG9hZCIgKTsKKyAgICAgIHB1c2ggKCBAUGx1Z2luTG9hZENvbW1hbmRsaW5lLCAkcGFyYW0gKTsKKyAgICB9CisKKyAgICBteSAkRXhlY0xpbmUgPSBqb2luKCcgJywgcXEvIiRDbGFuZyIvLCAiLWNjMSIsIEBQbHVnaW5Mb2FkQ29tbWFuZGxpbmUsICItYW5hbHl6ZXItY2hlY2tlci1oZWxwIiwgIjI+JjEiLCAifCIpOworICAgIG9wZW4oUFMsICRFeGVjTGluZSk7CisgICAgbXkgJGZvdW5kQ2hlY2tlcnMgPSAwOworICAgIHdoaWxlICg8UFM+KSB7CisgICAgICBpZiAoL0NIRUNLRVJTOi8pIHsKKyAgICAgICAgJGZvdW5kQ2hlY2tlcnMgPSAxOworICAgICAgICBsYXN0OworICAgICAgfQorICAgIH0KKyAgICBpZiAoISRmb3VuZENoZWNrZXJzKSB7CisgICAgICBwcmludCAiICAqKiogQ291bGQgbm90IHF1ZXJ5IENsYW5nIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY2hlY2tlcnMuIjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBwcmludCgiXG5BVkFJTEFCTEUgQ0hFQ0tFUlM6XG5cbiIpOworICAgICAgbXkgJHNraXAgPSAwOworICAgICAgIHdoaWxlKDxQUz4pIHsKKyAgICAgICAgaWYgKC9leHBlcmltZW50YWwvKSB7CisgICAgICAgICAgJHNraXAgPSAxOworICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCRza2lwKSB7CisgICAgICAgICAgbmV4dCBpZiAoIS9eXHNcc1teXHNdLyk7CisgICAgICAgICAgJHNraXAgPSAwOworICAgICAgICB9CisgICAgICAgIHMvXlxzXHMvLzsKKyAgICAgICAgaWYgKC9eKFteXHNdKykvKSB7CisgICAgICAgICAgIyBJcyB0aGUgY2hlY2tlciBlbmFibGVkPworICAgICAgICAgIG15ICRjaGVja2VyID0gJDE7CisgICAgICAgICAgbXkgJGVuYWJsZWQgPSAwOworICAgICAgICAgIG15ICRhZ2dyZWdhdGUgPSAiIjsKKyAgICAgICAgICBmb3JlYWNoIG15ICRkb21haW4gKHNwbGl0IC9cLi8sICRjaGVja2VyKSB7CisgICAgICAgICAgICAkYWdncmVnYXRlIC49ICRkb21haW47CisgICAgICAgICAgICBpZiAoJEVuYWJsZWRDaGVja2Vyc3skYWdncmVnYXRlfSkgeworICAgICAgICAgICAgICAkZW5hYmxlZCA9MTsKKyAgICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICMgYXBwZW5kIGEgZG90LCBpZiBhbiBhZGRpdGlvbmFsIGRvbWFpbiBpcyBhZGRlZCBpbiB0aGUgbmV4dCBpdGVyYXRpb24KKyAgICAgICAgICAgICRhZ2dyZWdhdGUgLj0gIi4iOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICgkZW5hYmxlZCkgeworICAgICAgICAgICAgcHJpbnQgIiArICI7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIiAgICI7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHByaW50ICIgICAiOworICAgICAgICB9CisgICAgICAgIHByaW50ICRfOworICAgICAgfQorICAgICAgcHJpbnQgIlxuTk9URTogXCIrXCIgaW5kaWNhdGVzIHRoYXQgYW4gYW5hbHlzaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuIjsKKyAgICB9CisgICAgY2xvc2UgUFM7CisgIH0KKyAgZWxzZSB7CisgICAgcHJpbnQgIiAgKioqIENvdWxkIG5vdCBxdWVyeSBDbGFuZyBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNoZWNrZXJzLlxuIjsKKyAgICBpZiAoZGVmaW5lZCAgJEFyZ0NsYW5nTm90Rm91bmRFcnJNc2cpIHsKKyAgICAgIHByaW50ICIgICoqKiBSZWFzb246ICRBcmdDbGFuZ05vdEZvdW5kRXJyTXNnXG4iOworICAgIH0KKyAgfQorCitwcmludCA8PEVORFRFWFQKKworQlVJTEQgT1BUSU9OUworCisgWW91IGNhbiBzcGVjaWZ5IGFueSBidWlsZCBvcHRpb24gYWNjZXB0YWJsZSB0byB0aGUgYnVpbGQgY29tbWFuZC4KKworRVhBTVBMRQorCisgc2Nhbi1idWlsZCAtbyAvdG1wL215aHRtbGRpciBtYWtlIC1qNAorCitUaGUgYWJvdmUgZXhhbXBsZSBjYXVzZXMgYW5hbHlzaXMgcmVwb3J0cyB0byBiZSBkZXBvc2l0ZWQgaW50byBhIHN1YmRpcmVjdG9yeQorb2YgIi90bXAvbXlodG1sZGlyIiBhbmQgdG8gcnVuICJtYWtlIiB3aXRoIHRoZSAiLWo0IiBvcHRpb24uIEEgZGlmZmVyZW50CitzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCBlYWNoIHRpbWUgc2Nhbi1idWlsZCBhbmFseXplcyBhIHByb2plY3QuIFRoZSBhbmFseXplcgorc2hvdWxkIHN1cHBvcnQgbW9zdCBwYXJhbGxlbCBidWlsZHMsIGJ1dCBub3QgZGlzdHJpYnV0ZWQgYnVpbGRzLgorCitFTkRURVhUCit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIEh0bWxFc2NhcGUgLSBIVE1MIGVudGl0eSBlbmNvZGUgY2hhcmFjdGVycyB0aGF0IGFyZSBzcGVjaWFsIGluIEhUTUwKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBIdG1sRXNjYXBlIHsKKyAgIyBjb3B5IGFyZ3VtZW50IHRvIG5ldyB2YXJpYWJsZSBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBvcmlnaW5hbAorICBteSAkYXJnID0gc2hpZnQgfHwgJyc7CisgIG15ICR0bXAgPSAkYXJnOworICAkdG1wID1+IHMvJi8mYW1wOy9nOworICAkdG1wID1+IHMvPC8mbHQ7L2c7CisgICR0bXAgPX4gcy8+LyZndDsvZzsKKyAgcmV0dXJuICR0bXA7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFNoZWxsRXNjYXBlIC0gYmFja3NsYXNoIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHNwZWNpYWwgdG8gdGhlIHNoZWxsCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgU2hlbGxFc2NhcGUgeworICAjIGNvcHkgYXJndW1lbnQgdG8gbmV3IHZhcmlhYmxlIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIG9yaWdpbmFsCisgIG15ICRhcmcgPSBzaGlmdCB8fCAnJzsKKyAgaWYgKCRhcmcgPX4gL1siXHNdLykgeyByZXR1cm4gIiciIC4gJGFyZyAuICInIjsgfQorICByZXR1cm4gJGFyZzsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgRmluZENsYW5nIC0gc2VhcmNoZXMgZm9yICdjbGFuZycgZXhlY3V0YWJsZS4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK3N1YiBGaW5kQ2xhbmcgeworICBpZiAoIWRlZmluZWQgJE9wdGlvbnN7QW5hbHl6ZXJEaXNjb3ZlcnlNZXRob2R9KSB7CisgICAgJENsYW5nID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vYmluL2NsYW5nIikgaWYgKC1mICIkUmVhbEJpbi9iaW4vY2xhbmciKTsKKyAgICBpZiAoIWRlZmluZWQgJENsYW5nIHx8ICEgLXggJENsYW5nKSB7CisgICAgICAkQ2xhbmcgPSBDd2Q6OnJlYWxwYXRoKCIkUmVhbEJpbi9jbGFuZyIpIGlmICgtZiAiJFJlYWxCaW4vY2xhbmciKTsKKyAgICB9CisgICAgaWYgKCFkZWZpbmVkICRDbGFuZyB8fCAhIC14ICRDbGFuZykgeworICAgICAgcmV0dXJuICJlcnJvcjogQ2Fubm90IGZpbmQgYW4gZXhlY3V0YWJsZSAnY2xhbmcnIHJlbGF0aXZlIHRvIiAuCisgICAgICAgICAgICAgIiBzY2FuLWJ1aWxkLiBDb25zaWRlciB1c2luZyAtLXVzZS1hbmFseXplciB0byBwaWNrIGEgdmVyc2lvbiBvZiIgLgorICAgICAgICAgICAgICIgJ2NsYW5nJyB0byB1c2UgZm9yIHN0YXRpYyBhbmFseXNpcy5cbiI7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIGlmICgkT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH0gPX4gL15bWHhdY29kZSQvKSB7CisgICAgICBteSAkeGNydW4gPSBgd2hpY2ggeGNydW5gOworICAgICAgY2hvbXAgJHhjcnVuOworICAgICAgaWYgKCR4Y3J1biBlcSAiIikgeworICAgICAgICByZXR1cm4gIkNhbm5vdCBmaW5kICd4Y3J1bicgdG8gZmluZCAnY2xhbmcnIGZvciBhbmFseXNpcy5cbiI7CisgICAgICB9CisgICAgICAkQ2xhbmcgPSBgJHhjcnVuIC10b29sY2hhaW4gWGNvZGVEZWZhdWx0IC1maW5kIGNsYW5nYDsKKyAgICAgIGNob21wICRDbGFuZzsKKyAgICAgIGlmICgkQ2xhbmcgZXEgIiIpIHsKKyAgICAgICAgcmV0dXJuICJObyAnY2xhbmcnIGV4ZWN1dGFibGUgZm91bmQgYnkgJ3hjcnVuJ1xuIjsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAkQ2xhbmcgPSAkT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH07CisgICAgICBpZiAoIWRlZmluZWQgJENsYW5nIG9yIG5vdCAteCAkQ2xhbmcpIHsKKyAgICAgICAgcmV0dXJuICJDYW5ub3QgZmluZCBhbiBleGVjdXRhYmxlIGNsYW5nIGF0ICckT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH0nXG4iOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gdW5kZWY7Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIFByb2Nlc3MgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK215ICRSZXF1ZXN0RGlzcGxheUhlbHAgPSAwOworbXkgJEZvcmNlRGlzcGxheUhlbHAgPSAwOworCitzdWIgUHJvY2Vzc0FyZ3MgeworICBteSAkQXJncyA9IHNoaWZ0OworICBteSAkTnVtQXJncyA9IDA7CisKKyAgd2hpbGUgKEAkQXJncykgeworCisgICAgJE51bUFyZ3MrKzsKKworICAgICMgU2NhbiBmb3Igb3B0aW9ucyB3ZSByZWNvZ25pemUuCisKKyAgICBteSAkYXJnID0gJEFyZ3MtPlswXTsKKworICAgIGlmICgkYXJnIGVxICItaCIgb3IgJGFyZyBlcSAiLS1oZWxwIikgeworICAgICAgJFJlcXVlc3REaXNwbGF5SGVscCA9IDE7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICctYW5hbHl6ZS1oZWFkZXJzJykgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7QW5hbHl6ZUhlYWRlcnN9ID0gMTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1vIikgeworICAgICAgc2hpZnQgQCRBcmdzOworCisgICAgICBpZiAoIUAkQXJncykgeworICAgICAgICBEaWVEaWFnKCInLW8nIG9wdGlvbiByZXF1aXJlcyBhIHRhcmdldCBkaXJlY3RvcnkgbmFtZS5cbiIpOworICAgICAgfQorCisgICAgICAjIENvbnN0cnVjdCBhbiBhYnNvbHV0ZSBwYXRoLiAgVXNlcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICAgIyBhcyBhIGJhc2UgaWYgdGhlIG9yaWdpbmFsIHBhdGggd2FzIG5vdCBhYnNvbHV0ZS4KKyAgICAgIG15ICRPdXREaXIgPSBzaGlmdCBAJEFyZ3M7CisgICAgICBta3BhdGgoJE91dERpcikgdW5sZXNzICgtZSAkT3V0RGlyKTsgICMgYWJzX3BhdGggd2FudHMgZXhpc3RpbmcgZGlyCisgICAgICAkT3B0aW9uc3tPdXRwdXREaXJ9ID0gYWJzX3BhdGgoJE91dERpcik7CisKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgPX4gL14tLWh0bWwtdGl0bGUoPSguKykpPyQvKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisKKyAgICAgIGlmICghZGVmaW5lZCAkMiB8fCAkMiBlcSAnJykgeworICAgICAgICBpZiAoIUAkQXJncykgeworICAgICAgICAgIERpZURpYWcoIictLWh0bWwtdGl0bGUnIG9wdGlvbiByZXF1aXJlcyBhIHN0cmluZy5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgJE9wdGlvbnN7SHRtbFRpdGxlfSA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICRPcHRpb25ze0h0bWxUaXRsZX0gPSAkMjsKKyAgICAgIH0KKworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWsiIG9yICRhcmcgZXEgIi0ta2VlcC1nb2luZyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0lnbm9yZUVycm9yc30gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyA9fiAvXi0tdXNlLWNjKD0oLispKT8kLykgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgbXkgJGNjOworCisgICAgICBpZiAoIWRlZmluZWQgJDIgfHwgJDIgZXEgIiIpIHsKKyAgICAgICAgaWYgKCFAJEFyZ3MpIHsKKyAgICAgICAgICBEaWVEaWFnKCInLS11c2UtY2MnIG9wdGlvbiByZXF1aXJlcyBhIGNvbXBpbGVyIGV4ZWN1dGFibGUgbmFtZS5cbiIpOworICAgICAgICB9CisgICAgICAgICRjYyA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAkY2MgPSAkMjsKKyAgICAgIH0KKworICAgICAgJE9wdGlvbnN7VXNlQ0N9ID0gJGNjOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyA9fiAvXi0tdXNlLWNcK1wrKD0oLispKT8kLykgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgbXkgJGN4eDsKKworICAgICAgaWYgKCFkZWZpbmVkICQyIHx8ICQyIGVxICIiKSB7CisgICAgICAgIGlmICghQCRBcmdzKSB7CisgICAgICAgICAgRGllRGlhZygiJy0tdXNlLWMrKycgb3B0aW9uIHJlcXVpcmVzIGEgY29tcGlsZXIgZXhlY3V0YWJsZSBuYW1lLlxuIik7CisgICAgICAgIH0KKyAgICAgICAgJGN4eCA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAkY3h4ID0gJDI7CisgICAgICB9CisKKyAgICAgICRPcHRpb25ze1VzZUNYWH0gPSAkY3h4OworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyA9fiAvXi0tYW5hbHl6ZXItdGFyZ2V0KD0oLispKT8kLykgeworICAgICAgc2hpZnQgQEFSR1Y7CisgICAgICBteSAkQW5hbHl6ZXJUYXJnZXQ7CisKKyAgICAgIGlmICghZGVmaW5lZCAkMiB8fCAkMiBlcSAiIikgeworICAgICAgICBpZiAoIUBBUkdWKSB7CisgICAgICAgICAgRGllRGlhZygiJy0tYW5hbHl6ZXItdGFyZ2V0JyBvcHRpb24gcmVxdWlyZXMgYSB0YXJnZXQgdHJpcGxlIG5hbWUuXG4iKTsKKyAgICAgICAgfQorICAgICAgICAkQW5hbHl6ZXJUYXJnZXQgPSBzaGlmdCBAQVJHVjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAkQW5hbHl6ZXJUYXJnZXQgPSAkMjsKKyAgICAgIH0KKworICAgICAgJE9wdGlvbnN7QW5hbHl6ZXJUYXJnZXR9ID0gJEFuYWx5emVyVGFyZ2V0OworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLXYiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tWZXJib3NlfSsrOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLVYiIG9yICRhcmcgZXEgIi0tdmlldyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze1ZpZXdSZXN1bHRzfSA9IDE7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItLXN0YXR1cy1idWdzIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7RXhpdFN0YXR1c0ZvdW5kQnVnc30gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLXN0b3JlIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7U3RvcmVNb2RlbH0gPSBzaGlmdCBAJEFyZ3M7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnIGVxICItY29uc3RyYWludHMiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tDb25zdHJhaW50c01vZGVsfSA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1pbnRlcm5hbC1zdGF0cyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0ludGVybmFsU3RhdHN9ID0gMTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1wbGlzdCIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze091dHB1dEZvcm1hdH0gPSAicGxpc3QiOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLXBsaXN0LWh0bWwiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tPdXRwdXRGb3JtYXR9ID0gInBsaXN0LWh0bWwiOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWFuYWx5emVyLWNvbmZpZyIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgIHB1c2ggQHskT3B0aW9uc3tDb25maWdPcHRpb25zfX0sIHNoaWZ0IEAkQXJnczsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1uby1mYWlsdXJlLXJlcG9ydHMiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tSZXBvcnRGYWlsdXJlc30gPSAwOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLXN0YXRzIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgJE9wdGlvbnN7QW5hbHl6ZXJTdGF0c30gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLW1heGxvb3AiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tNYXhMb29wfSA9IHNoaWZ0IEAkQXJnczsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1lbmFibGUtY2hlY2tlciIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgIG15ICRDaGVja2VyID0gc2hpZnQgQCRBcmdzOworICAgICAgIyBTdG9yZSAkTnVtQXJncyB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIgdGhlIGNoZWNrZXJzIHdlcmUgZW5hYmxlZC4KKyAgICAgICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskQ2hlY2tlcn0gPSAkTnVtQXJnczsKKyAgICAgIGRlbGV0ZSAkT3B0aW9uc3tEaXNhYmxlQ2hlY2tlcnN9eyRDaGVja2VyfTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi1kaXNhYmxlLWNoZWNrZXIiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICBteSAkQ2hlY2tlciA9IHNoaWZ0IEAkQXJnczsKKyAgICAgICMgU3RvcmUgJE51bUFyZ3MgdG8gcHJlc2VydmUgdGhlIG9yZGVyIHRoZSBjaGVja2VycyB3ZXJlIGRpc2FibGVkLgorICAgICAgJE9wdGlvbnN7RGlzYWJsZUNoZWNrZXJzfXskQ2hlY2tlcn0gPSAkTnVtQXJnczsKKyAgICAgIGRlbGV0ZSAkT3B0aW9uc3tFbmFibGVDaGVja2Vyc317JENoZWNrZXJ9OworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLWxvYWQtcGx1Z2luIikgeworICAgICAgc2hpZnQgQCRBcmdzOworICAgICAgcHVzaCBAeyRPcHRpb25ze1BsdWdpbnNUb0xvYWR9fSwgc2hpZnQgQCRBcmdzOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLS11c2UtYW5hbHl6ZXIiKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH0gPSBzaGlmdCBAJEFyZ3M7CisgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgkYXJnID1+IC9eLS11c2UtYW5hbHl6ZXI9KC4rKSQvKSB7CisgICAgICBzaGlmdCBAJEFyZ3M7CisgICAgICAkT3B0aW9uc3tBbmFseXplckRpc2NvdmVyeU1ldGhvZH0gPSAkMTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKCRhcmcgZXEgIi0ta2VlcC1lbXB0eSIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze0tlZXBFbXB0eX0gPSAxOworICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoJGFyZyBlcSAiLS1vdmVycmlkZS1jb21waWxlciIpIHsKKyAgICAgIHNoaWZ0IEAkQXJnczsKKyAgICAgICRPcHRpb25ze092ZXJyaWRlQ29tcGlsZXJ9ID0gMTsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgRGllRGlhZygidW5yZWNvZ25pemVkIG9wdGlvbiAnJGFyZydcbiIpIGlmICgkYXJnID1+IC9eLS8pOworCisgICAgJE51bUFyZ3MtLTsKKyAgICBsYXN0OworICB9CisgIHJldHVybiAkTnVtQXJnczsKK30KKworaWYgKCFAQVJHVikgeworICAkRm9yY2VEaXNwbGF5SGVscCA9IDEKK30KKworUHJvY2Vzc0FyZ3MoXEBBUkdWKTsKKyMgQWxsIGFyZ3VtZW50cyBhcmUgbm93IHNoaWZ0ZWQgZnJvbSBAQVJHVi4gVGhlIHJlc3QgaXMgYSBidWlsZCBjb21tYW5kLCBpZiBhbnkuCisKK2lmICghQEFSR1YgYW5kICEkUmVxdWVzdERpc3BsYXlIZWxwKSB7CisgIEVycm9yRGlhZygiTm8gYnVpbGQgY29tbWFuZCBzcGVjaWZpZWQuXG5cbiIpOworICAkRm9yY2VEaXNwbGF5SGVscCA9IDE7Cit9CisKK215ICRDbGFuZ05vdEZvdW5kRXJyTXNnID0gRmluZENsYW5nKCk7CisKK2lmICgkRm9yY2VEaXNwbGF5SGVscCB8fCAkUmVxdWVzdERpc3BsYXlIZWxwKSB7CisgIERpc3BsYXlIZWxwKCRDbGFuZ05vdEZvdW5kRXJyTXNnKTsKKyAgZXhpdCAkRm9yY2VEaXNwbGF5SGVscDsKK30KKworRGllRGlhZygkQ2xhbmdOb3RGb3VuZEVyck1zZykgaWYgKGRlZmluZWQgJENsYW5nTm90Rm91bmRFcnJNc2cpOworCiskQ2xhbmdDWFggPSAkQ2xhbmc7CitpZiAoJENsYW5nICF+IC9cK1wrKFwuZXhlKT8kLykgeworICAjIElmICRDbGFuZyBob2xkcyB0aGUgbmFtZSBvZiB0aGUgY2xhbmcrKyBleGVjdXRhYmxlIHRoZW4gd2UgbGVhdmUKKyAgIyAkQ2xhbmdDWFggYW5kICRDbGFuZyBlcXVhbCwgb3RoZXJ3aXNlIGNvbnN0cnVjdCB0aGUgbmFtZSBvZiB0aGUgY2xhbmcrKworICAjIGV4ZWN1dGFibGUgZnJvbSB0aGUgY2xhbmcgZXhlY3V0YWJsZSBuYW1lLgorCisgICMgRGV0ZXJtaW5lIG9wZXJhdGluZyBzeXN0ZW0gdW5kZXIgd2hpY2ggdGhpcyBjb3B5IG9mIFBlcmwgd2FzIGJ1aWx0LgorICBteSAkSXNXaW5CdWlsZCA9ICgkXk8gPX4vbXN5c3xjeWd3aW58TVNXaW4zMi8pOworICBpZigkSXNXaW5CdWlsZCkgeworICAgICRDbGFuZ0NYWCA9fiBzLy5leGUkLysrLmV4ZS87CisgIH0KKyAgZWxzZSB7CisgICAgJENsYW5nQ1hYID1+IHMvXC1cZCtcLlxkKyQvLzsKKyAgICAkQ2xhbmdDWFggLj0gIisrIjsKKyAgfQorfQorCisjIE1ha2Ugc3VyZSB0byB1c2UgIiIgdG8gaGFuZGxlIHBhdGhzIHdpdGggc3BhY2VzLgorJENsYW5nVmVyc2lvbiA9IEh0bWxFc2NhcGUoYCIkQ2xhbmciIC0tdmVyc2lvbmApOworCisjIERldGVybWluZSB3aGVyZSByZXN1bHRzIGdvLgorJENtZEFyZ3MgPSBIdG1sRXNjYXBlKGpvaW4oJyAnLCBtYXAoU2hlbGxFc2NhcGUoJF8pLCBAQVJHVikpKTsKKworIyBEZXRlcm1pbmUgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBIVE1MIHJlcG9ydHMuCitteSAkQmFzZURpciA9ICRPcHRpb25ze091dHB1dERpcn07CiskT3B0aW9uc3tPdXRwdXREaXJ9ID0gR2V0SFRNTFJ1bkRpcigkT3B0aW9uc3tPdXRwdXREaXJ9KTsKKworIyBEZXRlcm1pbmUgdGhlIGxvY2F0aW9uIG9mIGNjYy1hbmFseXplci4KK215ICRBYnNSZWFsQmluID0gQ3dkOjpyZWFscGF0aCgkUmVhbEJpbik7CitteSAkQ21kID0gIiRBYnNSZWFsQmluLy4uL2xpYmV4ZWMvY2NjLWFuYWx5emVyIjsKK215ICRDbWRDWFggPSAiJEFic1JlYWxCaW4vLi4vbGliZXhlYy9jKystYW5hbHl6ZXIiOworCisjIFBvcnRhYmlsaXR5OiB1c2UgbGVzcyBzdHJpY3QgYnV0IHBvcnRhYmxlIGNoZWNrIC1lIChmaWxlIGV4aXN0cykgaW5zdGVhZCBvZgorIyBub24tcG9ydGFibGUgLXggKGZpbGUgaXMgZXhlY3V0YWJsZSkuIE9uIHNvbWUgd2luZG93cyBwb3J0cyAteCBqdXN0IGNoZWNrcworIyBmaWxlIGV4dGVuc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBmaWxlIGlzIGV4ZWN1dGFibGUgKHNlZSBQZXJsIGxhbmd1YWdlCisjIHJlZmVyZW5jZSwgcGVybHBvcnQpCitpZiAoIWRlZmluZWQgJENtZCB8fCAhIC1lICRDbWQpIHsKKyAgJENtZCA9ICIkQWJzUmVhbEJpbi9jY2MtYW5hbHl6ZXIiOworICBEaWVEaWFnKCInY2NjLWFuYWx5emVyJyBkb2VzIG5vdCBleGlzdCBhdCAnJENtZCdcbiIpIGlmKCEgLWUgJENtZCk7Cit9CitpZiAoIWRlZmluZWQgJENtZENYWCB8fCAhIC1lICRDbWRDWFgpIHsKKyAgJENtZENYWCA9ICIkQWJzUmVhbEJpbi9jKystYW5hbHl6ZXIiOworICBEaWVEaWFnKCInYysrLWFuYWx5emVyJyBkb2VzIG5vdCBleGlzdCBhdCAnJENtZENYWCdcbiIpIGlmKCEgLWUgJENtZENYWCk7Cit9CisKK0RpYWcoIlVzaW5nICckQ2xhbmcnIGZvciBzdGF0aWMgYW5hbHlzaXNcbiIpOworCitTZXRIdG1sRW52KFxAQVJHViwgJE9wdGlvbnN7T3V0cHV0RGlyfSk7CisKK215IEBBbmFseXNlc1RvUnVuOworZm9yZWFjaCAoc29ydCB7ICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskYX0gPD0+ICRPcHRpb25ze0VuYWJsZUNoZWNrZXJzfXskYn0gfSAKKyAgICAgICAgIGtleXMgJXskT3B0aW9uc3tFbmFibGVDaGVja2Vyc319KSB7IAorICAjIFB1c2ggY2hlY2tlcnMgaW4gb3JkZXIgdGhleSB3ZXJlIGVuYWJsZWQuCisgIHB1c2ggQEFuYWx5c2VzVG9SdW4sICItYW5hbHl6ZXItY2hlY2tlciIsICRfOworfQorZm9yZWFjaCAoc29ydCB7ICRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc317JGF9IDw9PiAkT3B0aW9uc3tEaXNhYmxlQ2hlY2tlcnN9eyRifSB9IAorICAgICAgICAga2V5cyAleyRPcHRpb25ze0Rpc2FibGVDaGVja2Vyc319KSB7IAorICAjIFB1c2ggY2hlY2tlcnMgaW4gb3JkZXIgdGhleSB3ZXJlIGRpc2FibGVkLgorICBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLWRpc2FibGUtY2hlY2tlciIsICRfOworfQoraWYgKCRPcHRpb25ze0FuYWx5emVIZWFkZXJzfSkgeyBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLW9wdC1hbmFseXplLWhlYWRlcnMiOyB9CitpZiAoJE9wdGlvbnN7QW5hbHl6ZXJTdGF0c30pIHsgcHVzaCBAQW5hbHlzZXNUb1J1biwgJy1hbmFseXplci1jaGVja2VyPWRlYnVnLlN0YXRzJzsgfQoraWYgKCRPcHRpb25ze01heExvb3B9ID4gMCkgeyBwdXNoIEBBbmFseXNlc1RvUnVuLCAiLWFuYWx5emVyLW1heC1sb29wICRPcHRpb25ze01heExvb3B9IjsgfQorCisjIERlbGF5IHNldHRpbmcgdXAgb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIGNhc2Ugd2UgY2FuIGRvIHRydWUKKyMgaW50ZXJwb3NpdGlvbi4KK215ICRDQ0NfQU5BTFlaRVJfQU5BTFlTSVMgPSBqb2luICcgJywgQEFuYWx5c2VzVG9SdW47CitteSAkQ0NDX0FOQUxZWkVSX1BMVUdJTlMgPSBqb2luICcgJywgbWFwIHsgIi1sb2FkICIuJF8gfSBAeyRPcHRpb25ze1BsdWdpbnNUb0xvYWR9fTsKK215ICRDQ0NfQU5BTFlaRVJfQ09ORklHID0gam9pbiAnICcsIG1hcCB7ICItYW5hbHl6ZXItY29uZmlnICIuJF8gfSBAeyRPcHRpb25ze0NvbmZpZ09wdGlvbnN9fTsKK215ICVFbnZWYXJzID0gKAorICAnQ0MnID0+ICRDbWQsCisgICdDWFgnID0+ICRDbWRDWFgsCisgICdDTEFORycgPT4gJENsYW5nLAorICAnQ0xBTkdfQ1hYJyA9PiAkQ2xhbmdDWFgsCisgICdWRVJCT1NFJyA9PiAkT3B0aW9uc3tWZXJib3NlfSwKKyAgJ0NDQ19BTkFMWVpFUl9BTkFMWVNJUycgPT4gJENDQ19BTkFMWVpFUl9BTkFMWVNJUywKKyAgJ0NDQ19BTkFMWVpFUl9QTFVHSU5TJyA9PiAkQ0NDX0FOQUxZWkVSX1BMVUdJTlMsCisgICdDQ0NfQU5BTFlaRVJfQ09ORklHJyA9PiAkQ0NDX0FOQUxZWkVSX0NPTkZJRywKKyAgJ09VVFBVVF9ESVInID0+ICRPcHRpb25ze091dHB1dERpcn0sCisgICdDQ0NfQ0MnID0+ICRPcHRpb25ze1VzZUNDfSwKKyAgJ0NDQ19DWFgnID0+ICRPcHRpb25ze1VzZUNYWH0sCisgICdDQ0NfUkVQT1JUX0ZBSUxVUkVTJyA9PiAkT3B0aW9uc3tSZXBvcnRGYWlsdXJlc30sCisgICdDQ0NfQU5BTFlaRVJfU1RPUkVfTU9ERUwnID0+ICRPcHRpb25ze1N0b3JlTW9kZWx9LAorICAnQ0NDX0FOQUxZWkVSX0NPTlNUUkFJTlRTX01PREVMJyA9PiAkT3B0aW9uc3tDb25zdHJhaW50c01vZGVsfSwKKyAgJ0NDQ19BTkFMWVpFUl9JTlRFUk5BTF9TVEFUUycgPT4gJE9wdGlvbnN7SW50ZXJuYWxTdGF0c30sCisgICdDQ0NfQU5BTFlaRVJfT1VUUFVUX0ZPUk1BVCcgPT4gJE9wdGlvbnN7T3V0cHV0Rm9ybWF0fSwKKyAgJ0NMQU5HX0FOQUxZWkVSX1RBUkdFVCcgPT4gJE9wdGlvbnN7QW5hbHl6ZXJUYXJnZXR9CispOworCisjIFJ1biB0aGUgYnVpbGQuCitteSAkRXhpdFN0YXR1cyA9IFJ1bkJ1aWxkQ29tbWFuZChcQEFSR1YsICRPcHRpb25ze0lnbm9yZUVycm9yc30sICRDbWQsICRDbWRDWFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwlRW52VmFycyk7CisKK2lmIChkZWZpbmVkICRPcHRpb25ze091dHB1dEZvcm1hdH0pIHsKKyAgaWYgKCRPcHRpb25ze091dHB1dEZvcm1hdH0gPX4gL3BsaXN0LykgeworICAgIERpYWcgIkFuYWx5c2lzIHJ1biBjb21wbGV0ZS5cbiI7CisgICAgRGlhZyAiQW5hbHlzaXMgcmVzdWx0cyAocGxpc3QgZmlsZXMpIGRlcG9zaXRlZCBpbiAnJE9wdGlvbnN7T3V0cHV0RGlyfSdcbiI7CisgIH0KKyAgaWYgKCRPcHRpb25ze091dHB1dEZvcm1hdH0gPX4gL2h0bWwvKSB7CisgICAgIyBQb3N0cHJvY2VzcyB0aGUgSFRNTCBkaXJlY3RvcnkuCisgICAgbXkgJE51bUJ1Z3MgPSBQb3N0cHJvY2VzcygkT3B0aW9uc3tPdXRwdXREaXJ9LCAkQmFzZURpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRPcHRpb25ze0FuYWx5emVyU3RhdHN9LCAkT3B0aW9uc3tLZWVwRW1wdHl9KTsKKworICAgIGlmICgkT3B0aW9uc3tWaWV3UmVzdWx0c30gYW5kIC1yICIkT3B0aW9uc3tPdXRwdXREaXJ9L2luZGV4Lmh0bWwiKSB7CisgICAgICBEaWFnICJBbmFseXNpcyBydW4gY29tcGxldGUuXG4iOworICAgICAgRGlhZyAiVmlld2luZyBhbmFseXNpcyByZXN1bHRzIGluICckT3B0aW9uc3tPdXRwdXREaXJ9JyB1c2luZyBzY2FuLXZpZXcuXG4iOworICAgICAgbXkgJFNjYW5WaWV3ID0gQ3dkOjpyZWFscGF0aCgiJFJlYWxCaW4vc2Nhbi12aWV3Iik7CisgICAgICBpZiAoISAteCAkU2NhblZpZXcpIHsgJFNjYW5WaWV3ID0gInNjYW4tdmlldyI7IH0KKyAgICAgIGlmICghIC14ICRTY2FuVmlldykgeyAkU2NhblZpZXcgPSBDd2Q6OnJlYWxwYXRoKCIkUmVhbEJpbi8uLi8uLi9zY2FuLXZpZXcvYmluL3NjYW4tdmlldyIpOyB9CisgICAgICBleGVjICRTY2FuVmlldywgIiRPcHRpb25ze091dHB1dERpcn0iOworICAgIH0KKworICAgIGlmICgkT3B0aW9uc3tFeGl0U3RhdHVzRm91bmRCdWdzfSkgeworICAgICAgZXhpdCAxIGlmICgkTnVtQnVncyA+IDApOworICAgICAgZXhpdCAwOworICAgIH0KKyAgfQorfQorCitleGl0ICRFeGl0U3RhdHVzOwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2Jpbi9zY2FuLWJ1aWxkLmJhdCBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiZTY3NAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9iaW4vc2Nhbi1idWlsZC5iYXQKQEAgLTAsMCArMSBAQAorcGVybCAtUyBzY2FuLWJ1aWxkICUqDQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2Jpbi9zZXQteGNvZGUtYW5hbHl6ZXIgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvYmluL3NldC14Y29kZS1hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTY3NDgyCi0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2Jpbi9zZXQteGNvZGUtYW5hbHl6ZXIKQEAgLTAsMCArMSwxMTQgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyMgW1BSIDExNjYxXSBOb3RlIHRoYXQgd2UgaGFyZHdpcmUgdG8gL3Vzci9iaW4vcHl0aG9uIGJlY2F1c2Ugd2UKKyMgd2FudCB0byB0aGUgdXNlIHRoZSBzeXN0ZW0gdmVyc2lvbiBvZiBQeXRob24gb24gTWFjIE9TIFguCisjIFRoaXMgb25lIGhhcyB0aGUgc2NyaXB0aW5nIGJyaWRnZSBlbmFibGVkLgorCitpbXBvcnQgc3lzCitpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpOgorICAgIHByaW50ICJzZXQteGNvZGUtYW5hbHl6ZXIgcmVxdWlyZXMgUHl0aG9uIDIuNyBvciBsYXRlciIKKyAgICBzeXMuZXhpdCgxKQorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN0YXQKK2Zyb20gQXBwS2l0IGltcG9ydCAqCisKK2RlZiBGaW5kQ2xhbmdTcGVjcyhwYXRoKToKKyAgcHJpbnQgIigrKSBTZWFyY2hpbmcgZm9yIHhjc3BlYyBmaWxlIGluOiAiLCBwYXRoCisgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgaWYgZi5lbmRzd2l0aCgiLnhjc3BlYyIpIGFuZCBmLnN0YXJ0c3dpdGgoIkNsYW5nIExMVk0iKToKKyAgICAgICAgeWllbGQgb3MucGF0aC5qb2luKHJvb3QsIGYpCisKK2RlZiBNb2RpZnlTcGVjKHBhdGgsIGlzQnVpbHRpbkFuYWx5emVyLCBwYXRoVG9DaGVja2VyKToKKyAgdCA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpCisgIGZvdW5kQW5hbHl6ZXIgPSBGYWxzZQorICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICBpZiBpc0J1aWx0aW5BbmFseXplcjoKKyAgICAgICMgRmlyc3Qgc2VhcmNoIGZvciBDTEFOR19BTkFMWVpFUl9FWEVDLiAgTmV3ZXIKKyAgICAgICMgdmVyc2lvbnMgb2YgWGNvZGUgc2V0IEVYRUNfUEFUSCB0byBiZSBDTEFOR19BTkFMWVpFUl9FWEVDLgorICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGYyOgorICAgICAgICBmb3IgbGluZSBpbiBmMjoKKyAgICAgICAgICBpZiBsaW5lLmZpbmQoIkNMQU5HX0FOQUxZWkVSX0VYRUMiKSA+PSAwOgorICAgICAgICAgICAgcGF0aFRvQ2hlY2tlciA9ICIkKENMQU5HX0FOQUxZWkVSX0VYRUMpIgorICAgICAgICAgICAgYnJlYWsKKyAgICAjIE5vdyBjcmVhdGUgYSBuZXcgZmlsZS4KKyAgICBmb3IgbGluZSBpbiBmOgorICAgICAgaWYgbm90IGZvdW5kQW5hbHl6ZXI6CisgICAgICAgIGlmIGxpbmUuZmluZCgiU3RhdGljIEFuYWx5emVyIikgPj0gMDoKKyAgICAgICAgICBmb3VuZEFuYWx5emVyID0gVHJ1ZQorICAgICAgZWxzZToKKyAgICAgICAgbSA9IHJlLnNlYXJjaCgnXihccypFeGVjUGF0aFxzKj1ccyoiKScsIGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgbGluZSA9ICIiLmpvaW4oW20uZ3JvdXAoMCksIHBhdGhUb0NoZWNrZXIsICciO1xuJ10pCisgICAgICAgICAgIyBEbyBub3QgbW9kaWZ5IGZ1cnRoZXIgRXhlY1BhdGgncyBsYXRlciBpbiB0aGUgeGNzcGVjLgorICAgICAgICAgIGZvdW5kQW5hbHl6ZXIgPSBGYWxzZQorICAgICAgdC53cml0ZShsaW5lKQorICB0LmNsb3NlKCkKKyAgcHJpbnQgIigrKSBwcm9jZXNzaW5nOiIsIHBhdGgKKyAgdHJ5OgorICAgIHNodXRpbC5jb3B5KHQubmFtZSwgcGF0aCkKKyAgICBvcy5jaG1vZChwYXRoLCBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVdVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCisgIGV4Y2VwdCBJT0Vycm9yLCB3aHk6CisgICAgcHJpbnQgIiAgICAoLSkgQ2Fubm90IHVwZGF0ZSBmaWxlOiIsIHdoeSwgIlxuIgorICBleGNlcHQgT1NFcnJvciwgd2h5OgorICAgIHByaW50ICIgICAgKC0pIENhbm5vdCB1cGRhdGUgZmlsZToiLCB3aHksICJcbiIKKyAgb3MudW5saW5rKHQubmFtZSkKKworZGVmIG1haW4oKToKKyAgZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCisgIHBhcnNlciA9IE9wdGlvblBhcnNlcigndXNhZ2U6ICVwcm9nIFtvcHRpb25zXScpCisgIHBhcnNlci5zZXRfZGVzY3JpcHRpb24oX19kb2NfXykKKyAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXNlLWNoZWNrZXItYnVpbGQiLCBkZXN0PSJwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0iVXNlIHRoZSBDbGFuZyBsb2NhdGVkIGF0IHRoZSBwcm92aWRlZCBhYnNvbHV0ZSBwYXRoLCBlLmcuIC9Vc2Vycy9mb28vY2hlY2tlci0xIikKKyAgcGFyc2VyLmFkZF9vcHRpb24oIi0tdXNlLXhjb2RlLWNsYW5nIiwgYWN0aW9uPSJzdG9yZV9jb25zdCIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0PSIkKENMQU5HKSIsIGRlc3Q9ImRlZmF1bHQiLAorICAgICAgICAgICAgICAgICAgICBoZWxwPSJVc2UgdGhlIENsYW5nIGJ1bmRsZWQgd2l0aCBYY29kZSIpCisgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgaWYgb3B0aW9ucy5wYXRoIGlzIE5vbmUgYW5kIG9wdGlvbnMuZGVmYXVsdCBpcyBOb25lOgorICAgIHBhcnNlci5lcnJvcigiWW91IG11c3Qgc3BlY2lmeSBhIHZlcnNpb24gb2YgQ2xhbmcgdG8gdXNlIGZvciBzdGF0aWMgYW5hbHlzaXMuICBTcGVjaWZ5ICctaCcgZm9yIGRldGFpbHMiKQorCisgICMgZGV0ZXJtaW5lIGlmIFhjb2RlIGlzIHJ1bm5pbmcKKyAgZm9yIHggaW4gTlNXb3Jrc3BhY2Uuc2hhcmVkV29ya3NwYWNlKCkucnVubmluZ0FwcGxpY2F0aW9ucygpOgorICAgIGlmIHgubG9jYWxpemVkTmFtZSgpLmZpbmQoIlhjb2RlIikgPj0gMDoKKyAgICAgIHByaW50ICIoLSkgWW91IG11c3QgcXVpdCBYY29kZSBmaXJzdCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBjb25maWd1cmF0aW9uIGZpbGVzLiIKKyAgICAgIHN5cy5leGl0KDEpCisKKyAgaXNCdWlsdGluQW5hbHl6ZXIgPSBGYWxzZQorICBpZiBvcHRpb25zLnBhdGg6CisgICAgIyBFeHBhbmQgdGlsZGVzLgorICAgIHBhdGggPSBvcy5wYXRoLmV4cGFuZHVzZXIob3B0aW9ucy5wYXRoKQorICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCJjbGFuZyIpOgorICAgICAgcHJpbnQgIigrKSBVc2luZyBDbGFuZyBidW5kbGVkIHdpdGggY2hlY2tlciBidWlsZDoiLCBwYXRoCisgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICJiaW4iLCAiY2xhbmciKTsKKyAgICBlbHNlOgorICAgICAgcHJpbnQgIigrKSBVc2luZyBDbGFuZyBsb2NhdGVkIGF0OiIsIHBhdGgKKyAgZWxzZToKKyAgICBwcmludCAiKCspIFVzaW5nIHRoZSBDbGFuZyBidW5kbGVkIHdpdGggWGNvZGUiCisgICAgcGF0aCA9IG9wdGlvbnMuZGVmYXVsdAorICAgIGlzQnVpbHRpbkFuYWx5emVyID0gVHJ1ZQorCisgIHRyeToKKyAgICB4Y29kZV9wYXRoID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJ4Y29kZS1zZWxlY3QiLCAiLXByaW50LXBhdGgiXSkKKyAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICMgRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb24gd2hlbiB1c2luZyBQeXRob24gPCAyLjcuMAorICAgIHhjb2RlX3BhdGggPSAiL0RldmVsb3BlciIKKyAgaWYgKHhjb2RlX3BhdGguZmluZCgiLmFwcC8iKSAhPSAtMSk6CisgICAgIyBDdXQgb2ZmIHRoZSAnRGV2ZWxvcGVyJyBkaXIsIGFzIHRoZSB4Y3NwZWMgbGllcyBpbiBhbm90aGVyIHBhcnQKKyAgICAjIG9mIHRoZSBYY29kZS5hcHAgc3VidHJlZS4KKyAgICB4Y29kZV9wYXRoID0geGNvZGVfcGF0aC5yc3BsaXQoJy9EZXZlbG9wZXInLCAxKVswXQorCisgIGZvdW5kU3BlYyA9IEZhbHNlCisgIGZvciB4IGluIEZpbmRDbGFuZ1NwZWNzKHhjb2RlX3BhdGgpOgorICAgIGZvdW5kU3BlYyA9IFRydWUKKyAgICBNb2RpZnlTcGVjKHgsIGlzQnVpbHRpbkFuYWx5emVyLCBwYXRoKQorCisgIGlmIGZvdW5kU3BlYyA9PSBGYWxzZToKKyAgICAgIHByaW50ICIoLSkgTm8gY29tcGlsZXIgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBmb3VuZC4gIFhjb2RlJ3MgYW5hbHl6ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZWQuIgorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICBtYWluKCkKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplciBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplcgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGE1ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvYysrLWFuYWx5emVyCkBAIC0wLDAgKzEsOCBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCit1c2UgQ3dkIHF3LyBhYnNfcGF0aCAvOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3LyBkaXJuYW1lIC87CisjIEFkZCBzY2FuLWJ1aWxkIGRpciB0byB0aGUgbGlzdCBvZiBwbGFjZXMgd2hlcmUgcGVybCBsb29rcyBmb3IgbW9kdWxlcy4KK3VzZSBsaWIgZGlybmFtZShhYnNfcGF0aCgkMCkpOworCitkbyAnY2NjLWFuYWx5emVyJzsKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2MrKy1hbmFseXplci5iYXQgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjA0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jKystYW5hbHl6ZXIuYmF0CkBAIC0wLDAgKzEgQEAKK3BlcmwgLVMgYysrLWFuYWx5emVyICUqDQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvY2NjLWFuYWx5emVyIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvY2NjLWFuYWx5emVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzMWRkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvbGliZXhlYy9jY2MtYW5hbHl6ZXIKQEAgLTAsMCArMSw3NzcgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMKKyMgICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVjdHVyZQorIworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbiBTb3VyY2UKKyMgTGljZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorIworIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKyMKKyMgIEEgc2NyaXB0IGRlc2lnbmVkIHRvIGludGVycG9zZSBiZXR3ZWVuIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGdjYy4gIEl0IGludm9rZXMKKyMgIGJvdGggZ2NjIGFuZCB0aGUgc3RhdGljIGFuYWx5emVyLgorIworIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBGaW5kQmluOwordXNlIEN3ZCBxdy8gZ2V0Y3dkIGFic19wYXRoIC87Cit1c2UgRmlsZTo6VGVtcCBxdy8gdGVtcGZpbGUgLzsKK3VzZSBGaWxlOjpQYXRoIHF3IC8gbWtwYXRoIC87Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgVGV4dDo6UGFyc2VXb3JkczsKKworIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKyMgTGlzdCBmb3JtICdzeXN0ZW0nIHdpdGggU1RET1VUIGFuZCBTVERFUlIgY2FwdHVyZWQuCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworCitzdWIgc2lsZW50X3N5c3RlbSB7CisgIG15ICRIdG1sRGlyID0gc2hpZnQ7CisgIG15ICRDb21tYW5kID0gc2hpZnQ7CisKKyAgIyBTYXZlIFNURE9VVCBhbmQgU1RERVJSIGFuZCByZWRpcmVjdCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICBvcGVuIE9MRE9VVCwgIj4mIiwgXCpTVERPVVQ7CisgIG9wZW4gT0xERVJSLCAiPiYiLCBcKlNUREVSUjsKKyAgbXkgKCRUbXBGSCwgJFRtcEZpbGUpID0gdGVtcGZpbGUoInRlbXBfYnVmX1hYWFhYWCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUiA9PiAkSHRtbERpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5MSU5LID0+IDEpOworICBvcGVuKFNURE9VVCwgIj4kVG1wRmlsZSIpOworICBvcGVuKFNUREVSUiwgIj4mIiwgXCpTVERPVVQpOworCisgICMgSW52b2tlICdzeXN0ZW0nLCBTVERPVVQgYW5kIFNUREVSUiBhcmUgb3V0cHV0IHRvIGEgdGVtcG9yYXJ5IGZpbGUuCisgIHN5c3RlbSAkQ29tbWFuZCwgQF87CisKKyAgIyBSZXN0b3JlIFNURE9VVCBhbmQgU1RERVJSLgorICBvcGVuIFNURE9VVCwgIj4mIiwgXCpPTERPVVQ7CisgIG9wZW4gU1RERVJSLCAiPiYiLCBcKk9MREVSUjsKKworICByZXR1cm4gJFRtcEZIOworfQorCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworIyBDb21waWxlciBjb21tYW5kIHNldHVwLgorIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKworIyBTZWFyY2ggaW4gdGhlIFBBVEggaWYgdGhlIGNvbXBpbGVyIGV4aXN0cworc3ViIFNlYXJjaEluUGF0aCB7CisgICAgbXkgJGZpbGUgPSBzaGlmdDsKKyAgICBmb3JlYWNoIG15ICRkaXIgKHNwbGl0ICgnOicsICRFTlZ7UEFUSH0pKSB7CisgICAgICAgIGlmICgteCAiJGRpci8kZmlsZSIpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitteSAkQ29tcGlsZXI7CitteSAkQ2xhbmc7CitteSAkRGVmYXVsdENDb21waWxlcjsKK215ICREZWZhdWx0Q1hYQ29tcGlsZXI7CitteSAkSXNDWFg7CitteSAkQW5hbHl6ZXJUYXJnZXQ7CisKKyMgSWYgb24gT1NYLCB1c2UgeGNydW4gdG8gZGV0ZXJtaW5lIHRoZSBTREsgcm9vdC4KK215ICRVc2VYQ1JVTiA9IDA7CisKK2lmIChgdW5hbWUgLWFgID1+IG0vRGFyd2luLykgeworICAkRGVmYXVsdENDb21waWxlciA9ICdjbGFuZyc7CisgICREZWZhdWx0Q1hYQ29tcGlsZXIgPSAnY2xhbmcrKyc7CisgICMgT2xkZXIgdmVyc2lvbnMgb2YgT1NYIGRvIG5vdCBoYXZlIHhjcnVuIHRvCisgICMgcXVlcnkgdGhlIFNESyBsb2NhdGlvbi4KKyAgaWYgKC14ICIvdXNyL2Jpbi94Y3J1biIpIHsKKyAgICAkVXNlWENSVU4gPSAxOworICB9Cit9IGVsc2UgeworICAkRGVmYXVsdENDb21waWxlciA9ICdnY2MnOworICAkRGVmYXVsdENYWENvbXBpbGVyID0gJ2crKyc7Cit9CisKK2lmICgkRmluZEJpbjo6U2NyaXB0ID1+IC9jXCtcKy1hbmFseXplci8pIHsKKyAgJENvbXBpbGVyID0gJEVOVnsnQ0NDX0NYWCd9OworICBpZiAoIWRlZmluZWQgJENvbXBpbGVyIHx8ICghIC14ICRDb21waWxlciAmJiAhIFNlYXJjaEluUGF0aCgkQ29tcGlsZXIpKSkgeyAkQ29tcGlsZXIgPSAkRGVmYXVsdENYWENvbXBpbGVyOyB9CisKKyAgJENsYW5nID0gJEVOVnsnQ0xBTkdfQ1hYJ307CisgIGlmICghZGVmaW5lZCAkQ2xhbmcgfHwgISAteCAkQ2xhbmcpIHsgJENsYW5nID0gJ2NsYW5nKysnOyB9CisKKyAgJElzQ1hYID0gMQorfQorZWxzZSB7CisgICRDb21waWxlciA9ICRFTlZ7J0NDQ19DQyd9OworICBpZiAoIWRlZmluZWQgJENvbXBpbGVyIHx8ICghIC14ICRDb21waWxlciAmJiAhIFNlYXJjaEluUGF0aCgkQ29tcGlsZXIpKSkgeyAkQ29tcGlsZXIgPSAkRGVmYXVsdENDb21waWxlcjsgfQorCisgICRDbGFuZyA9ICRFTlZ7J0NMQU5HJ307CisgIGlmICghZGVmaW5lZCAkQ2xhbmcgfHwgISAteCAkQ2xhbmcpIHsgJENsYW5nID0gJ2NsYW5nJzsgfQorCisgICRJc0NYWCA9IDAKK30KKworJEFuYWx5emVyVGFyZ2V0ID0gJEVOVnsnQ0xBTkdfQU5BTFlaRVJfVEFSR0VUJ307CisKKyMjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMjCisjIENsZWFudXAuCisjIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jIworCitteSAkUmVwb3J0RmFpbHVyZXMgPSAkRU5WeydDQ0NfUkVQT1JUX0ZBSUxVUkVTJ307CitpZiAoIWRlZmluZWQgJFJlcG9ydEZhaWx1cmVzKSB7ICRSZXBvcnRGYWlsdXJlcyA9IDE7IH0KKworbXkgJENsZWFudXBGaWxlOworbXkgJFJlc3VsdEZpbGU7CisKKyMgUmVtb3ZlIGFueSBzdGFsZSBmaWxlcyBhdCBleGl0LgorRU5EIHsKKyAgaWYgKGRlZmluZWQgJFJlc3VsdEZpbGUgJiYgLXogJFJlc3VsdEZpbGUpIHsKKyAgICB1bmxpbmsoJFJlc3VsdEZpbGUpOworICB9CisgIGlmIChkZWZpbmVkICRDbGVhbnVwRmlsZSkgeworICAgIHVubGluaygkQ2xlYW51cEZpbGUpOworICB9Cit9CisKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjICBQcm9jZXNzIENsYW5nIENyYXNoZXMuCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCitzdWIgR2V0UFBFeHQgeworICBteSAkTGFuZyA9IHNoaWZ0OworICBpZiAoJExhbmcgPX4gL29iamVjdGl2ZS1jXCtcKy8pIHsgcmV0dXJuICIubWlpIiB9OworICBpZiAoJExhbmcgPX4gL29iamVjdGl2ZS1jLykgeyByZXR1cm4gIi5taSI7IH0KKyAgaWYgKCRMYW5nID1+IC9jXCtcKy8pIHsgcmV0dXJuICIuaWkiOyB9CisgIHJldHVybiAiLmkiOworfQorCisjIFNldCB0aGlzIHRvIDEgaWYgd2Ugd2FudCB0byBpbmNsdWRlICdwYXJzZXIgcmVqZWN0cycgZmlsZXMuCitteSAkSW5jbHVkZVBhcnNlclJlamVjdHMgPSAwOworbXkgJFBhcnNlclJlamVjdHMgPSAiUGFyc2VyIFJlamVjdHMiOworbXkgJEF0dHJpYnV0ZUlnbm9yZWQgPSAiQXR0cmlidXRlIElnbm9yZWQiOworbXkgJE90aGVyRXJyb3IgPSAiT3RoZXIgRXJyb3IiOworCitzdWIgUHJvY2Vzc0NsYW5nRmFpbHVyZSB7CisgIG15ICgkQ2xhbmcsICRMYW5nLCAkZmlsZSwgJEFyZ3MsICRIdG1sRGlyLCAkRXJyb3JUeXBlLCAkb2ZpbGUpID0gQF87CisgIG15ICREaXIgPSAiJEh0bWxEaXIvZmFpbHVyZXMiOworICBta3BhdGggJERpcjsKKworICBteSAkcHJlZml4ID0gImNsYW5nX2NyYXNoIjsKKyAgaWYgKCRFcnJvclR5cGUgZXEgJFBhcnNlclJlamVjdHMpIHsKKyAgICAkcHJlZml4ID0gImNsYW5nX3BhcnNlcl9yZWplY3RzIjsKKyAgfQorICBlbHNpZiAoJEVycm9yVHlwZSBlcSAkQXR0cmlidXRlSWdub3JlZCkgeworICAgICRwcmVmaXggPSAiY2xhbmdfYXR0cmlidXRlX2lnbm9yZWQiOworICB9CisgIGVsc2lmICgkRXJyb3JUeXBlIGVxICRPdGhlckVycm9yKSB7CisgICAgJHByZWZpeCA9ICJjbGFuZ19vdGhlcl9lcnJvciI7CisgIH0KKworICAjIEdlbmVyYXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB3aXRoIENsYW5nLgorICBteSAoJFBQSCwgJFBQRmlsZSkgPSB0ZW1wZmlsZSggJHByZWZpeCAuICJfWFhYWFhYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVRkZJWCA9PiBHZXRQUEV4dCgkTGFuZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESVIgPT4gJERpcik7CisgIGNsb3NlICgkUFBIKTsKKyAgc3lzdGVtICRDbGFuZywgQCRBcmdzLCAiLUUiLCAiLW8iLCAkUFBGaWxlOworCisgICMgQ3JlYXRlIHRoZSBpbmZvIGZpbGUuCisgIG9wZW4gKE9VVCwgIj4iLCAiJFBQRmlsZS5pbmZvLnR4dCIpIG9yIGRpZSAiQ2Fubm90IG9wZW4gJFBQRmlsZS5pbmZvLnR4dFxuIjsKKyAgcHJpbnQgT1VUIGFic19wYXRoKCRmaWxlKSwgIlxuIjsKKyAgcHJpbnQgT1VUICIkRXJyb3JUeXBlXG4iOworICBwcmludCBPVVQgIkAkQXJnc1xuIjsKKyAgY2xvc2UgT1VUOworICBgdW5hbWUgLWEgPj4gJFBQRmlsZS5pbmZvLnR4dCAyPiYxYDsKKyAgYCIkQ29tcGlsZXIiIC12ID4+ICRQUEZpbGUuaW5mby50eHQgMj4mMWA7CisgIHJlbmFtZSgkb2ZpbGUsICIkUFBGaWxlLnN0ZGVyci50eHQiKTsKKyAgcmV0dXJuIChiYXNlbmFtZSAkUFBGaWxlKTsKK30KKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgIFJ1bm5pbmcgdGhlIGFuYWx5emVyLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworc3ViIEdldENDQXJncyB7CisgIG15ICRIdG1sRGlyID0gc2hpZnQ7CisgIG15ICRtb2RlID0gc2hpZnQ7CisgIG15ICRBcmdzID0gc2hpZnQ7CisgIG15ICRsaW5lOworICBteSAkT3V0cHV0U3RyZWFtID0gc2lsZW50X3N5c3RlbSgkSHRtbERpciwgJENsYW5nLCAiLSMjIyIsICRtb2RlLCBAJEFyZ3MpOworICB3aGlsZSAoPCRPdXRwdXRTdHJlYW0+KSB7CisgICAgbmV4dCBpZiAoIS9ccyI/LWNjMSI/XHMvKTsKKyAgICAkbGluZSA9ICRfOworICB9CisgIGRpZSAiY291bGQgbm90IGZpbmQgY2xhbmcgbGluZVxuIiBpZiAoIWRlZmluZWQgJGxpbmUpOworICAjIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4KKyAgJGxpbmUgPX4gcy9eXHMrfFxzKyQvL2c7CisgIG15IEBpdGVtcyA9IHF1b3Rld29yZHMoJ1xzKycsIDAsICRsaW5lKTsKKyAgbXkgJGNtZCA9IHNoaWZ0IEBpdGVtczsKKyAgZGllICJjYW5ub3QgZmluZCAnY2xhbmcnIGluICdjbGFuZycgY29tbWFuZFxuIiBpZiAoISgkY21kID1+IC9jbGFuZy8pKTsKKyAgcmV0dXJuIFxAaXRlbXM7Cit9CisKK3N1YiBBbmFseXplIHsKKyAgbXkgKCRDbGFuZywgJE9yaWdpbmFsQXJncywgJEFuYWx5emVBcmdzLCAkTGFuZywgJE91dHB1dCwgJFZlcmJvc2UsICRIdG1sRGlyLAorICAgICAgJGZpbGUpID0gQF87CisKKyAgbXkgQEFyZ3MgPSBAJE9yaWdpbmFsQXJnczsKKyAgbXkgJENtZDsKKyAgbXkgQENtZEFyZ3M7CisgIG15IEBDbWRBcmdzU2Fuc0FuYWx5c2VzOworCisgIGlmICgkTGFuZyA9fiAvaGVhZGVyLykgeworICAgIGV4aXQgMCBpZiAoIWRlZmluZWQgKCRPdXRwdXQpKTsKKyAgICAkQ21kID0gJ2NwJzsKKyAgICBwdXNoIEBDbWRBcmdzLCAkZmlsZTsKKyAgICAjIFJlbW92ZSB0aGUgUENIIGV4dGVuc2lvbi4KKyAgICAkT3V0cHV0ID1+IHMvWy5dZ2NoJC8vOworICAgIHB1c2ggQENtZEFyZ3MsICRPdXRwdXQ7CisgICAgQENtZEFyZ3NTYW5zQW5hbHlzZXMgPSBAQ21kQXJnczsKKyAgfQorICBlbHNlIHsKKyAgICAkQ21kID0gJENsYW5nOworCisgICAgIyBDcmVhdGUgYXJndW1lbnRzIGZvciBkb2luZyByZWd1bGFyIHBhcnNpbmcuCisgICAgbXkgJFN5bnRheEFyZ3MgPSBHZXRDQ0FyZ3MoJEh0bWxEaXIsICItZnN5bnRheC1vbmx5IiwgXEBBcmdzKTsKKyAgICBAQ21kQXJnc1NhbnNBbmFseXNlcyA9IEAkU3ludGF4QXJnczsKKworICAgICMgQ3JlYXRlIGFyZ3VtZW50cyBmb3IgZG9pbmcgc3RhdGljIGFuYWx5c2lzLgorICAgIGlmIChkZWZpbmVkICRSZXN1bHRGaWxlKSB7CisgICAgICBwdXNoIEBBcmdzLCAnLW8nLCAkUmVzdWx0RmlsZTsKKyAgICB9CisgICAgZWxzaWYgKGRlZmluZWQgJEh0bWxEaXIpIHsKKyAgICAgIHB1c2ggQEFyZ3MsICctbycsICRIdG1sRGlyOworICAgIH0KKyAgICBpZiAoJFZlcmJvc2UpIHsKKyAgICAgIHB1c2ggQEFyZ3MsICItWGNsYW5nIiwgIi1hbmFseXplci1kaXNwbGF5LXByb2dyZXNzIjsKKyAgICB9CisKKyAgICBmb3JlYWNoIG15ICRhcmcgKEAkQW5hbHl6ZUFyZ3MpIHsKKyAgICAgIHB1c2ggQEFyZ3MsICItWGNsYW5nIiwgJGFyZzsKKyAgICB9CisKKyAgICAjIERpc3BsYXkgVWJpdml6IGdyYXBoPworICAgIGlmIChkZWZpbmVkICRFTlZ7J0NDQ19VQkknfSkgeworICAgICAgcHVzaCBAQXJncywgIi1YY2xhbmciLCAiLWFuYWx5emVyLXZpei1lZ3JhcGgtdWJpZ3JhcGgiOworICAgIH0KKworICAgIGlmIChkZWZpbmVkICRBbmFseXplclRhcmdldCkgeworICAgICAgcHVzaCBAQXJncywgIi10YXJnZXQiLCAkQW5hbHl6ZXJUYXJnZXQ7CisgICAgfQorCisgICAgbXkgJEFuYWx5c2lzQXJncyA9IEdldENDQXJncygkSHRtbERpciwgIi0tYW5hbHl6ZSIsIFxAQXJncyk7CisgICAgQENtZEFyZ3MgPSBAJEFuYWx5c2lzQXJnczsKKyAgfQorCisgIG15IEBQcmludEFyZ3M7CisgIG15ICRkaXI7CisKKyAgaWYgKCRWZXJib3NlKSB7CisgICAgJGRpciA9IGdldGN3ZCgpOworICAgIHByaW50IFNUREVSUiAiXG5bTE9DQVRJT05dOiAkZGlyXG4iOworICAgIHB1c2ggQFByaW50QXJncywiJyRDbWQnIjsKKyAgICBmb3JlYWNoIG15ICRhcmcgKEBDbWRBcmdzKSB7CisgICAgICAgIHB1c2ggQFByaW50QXJncywiXCckYXJnXCciOworICAgIH0KKyAgfQorICBpZiAoJFZlcmJvc2UgPT0gMSkgeworICAgICMgV2UgTVVTVCBwcmludCB0byBzdGRlcnIuICBTb21lIGNsaWVudHMgdXNlIHRoZSBzdGRvdXQgb3V0cHV0IG9mCisgICAgIyBnY2MgZm9yIHZhcmlvdXMgcHVycG9zZXMuCisgICAgcHJpbnQgU1RERVJSIGpvaW4oJyAnLCBAUHJpbnRBcmdzKTsKKyAgICBwcmludCBTVERFUlIgIlxuIjsKKyAgfQorICBlbHNpZiAoJFZlcmJvc2UgPT0gMikgeworICAgIHByaW50IFNUREVSUiAiI1NIRUxMIChjZCAnJGRpcicgJiYgQFByaW50QXJncylcbiI7CisgIH0KKworICAjIFNhdmUgU1RET1VUIGFuZCBTVERFUlIgb2YgY2xhbmcgdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgcmVyb3V0ZQorICAjIGFsbCBjbGFuZyBvdXRwdXQgdG8gY2NjLWFuYWx5emVyJ3MgU1RERVJSLgorICAjIFdlIHNhdmUgdGhlIG91dHB1dCBmaWxlIGluIHRoZSAnY3Jhc2hlcycgZGlyZWN0b3J5IGlmIGNsYW5nIGVuY291bnRlcnMKKyAgIyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgZmlsZS4KKyAgbXkgKCRvZmgsICRvZmlsZSkgPSB0ZW1wZmlsZSgiY2xhbmdfb3V0cHV0X1hYWFhYWCIsIERJUiA9PiAkSHRtbERpcik7CisKKyAgbXkgJE91dHB1dFN0cmVhbSA9IHNpbGVudF9zeXN0ZW0oJEh0bWxEaXIsICRDbWQsIEBDbWRBcmdzKTsKKyAgd2hpbGUgKCA8JE91dHB1dFN0cmVhbT4gKSB7CisgICAgcHJpbnQgJG9maCAkXzsKKyAgICBwcmludCBTVERFUlIgJF87CisgIH0KKyAgbXkgJFJlc3VsdCA9ICQ/OworICBjbG9zZSAkb2ZoOworCisgICMgRGlkIHRoZSBjb21tYW5kIGRpZSBiZWNhdXNlIG9mIGEgc2lnbmFsPworICBpZiAoJFJlcG9ydEZhaWx1cmVzKSB7CisgICAgaWYgKCRSZXN1bHQgJiAxMjcgYW5kICRDbWQgZXEgJENsYW5nIGFuZCBkZWZpbmVkICRIdG1sRGlyKSB7CisgICAgICBQcm9jZXNzQ2xhbmdGYWlsdXJlKCRDbGFuZywgJExhbmcsICRmaWxlLCBcQENtZEFyZ3NTYW5zQW5hbHlzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICRIdG1sRGlyLCAiQ3Jhc2giLCAkb2ZpbGUpOworICAgIH0KKyAgICBlbHNpZiAoJFJlc3VsdCkgeworICAgICAgaWYgKCRJbmNsdWRlUGFyc2VyUmVqZWN0cyAmJiAhKCRmaWxlID1+L2NvbmZ0ZXN0LykpIHsKKyAgICAgICAgUHJvY2Vzc0NsYW5nRmFpbHVyZSgkQ2xhbmcsICRMYW5nLCAkZmlsZSwgXEBDbWRBcmdzU2Fuc0FuYWx5c2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIdG1sRGlyLCAkUGFyc2VyUmVqZWN0cywgJG9maWxlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIFByb2Nlc3NDbGFuZ0ZhaWx1cmUoJENsYW5nLCAkTGFuZywgJGZpbGUsIFxAQ21kQXJnc1NhbnNBbmFseXNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSHRtbERpciwgJE90aGVyRXJyb3IsICRvZmlsZSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgIyBDaGVjayBpZiB0aGVyZSB3ZXJlIGFueSB1bmhhbmRsZWQgYXR0cmlidXRlcy4KKyAgICAgIGlmIChvcGVuKENISUxELCAkb2ZpbGUpKSB7CisgICAgICAgIG15ICVhdHRyaWJ1dGVzX25vdF9oYW5kbGVkOworCisgICAgICAgICMgRG9uJ3QgZmxhZyB3YXJuaW5ncyBhYm91dCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgdGhhdCB3ZQorICAgICAgICAjIGtub3cgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJ5IENsYW5nLgorICAgICAgICAkYXR0cmlidXRlc19ub3RfaGFuZGxlZHsiY2RlY2wifSA9IDE7CisKKyAgICAgICAgbXkgJHBwZmlsZTsKKyAgICAgICAgd2hpbGUgKDxDSElMRD4pIHsKKyAgICAgICAgICBuZXh0IGlmICghIC93YXJuaW5nOiAnKFteXCddKyknIGF0dHJpYnV0ZSBpZ25vcmVkLyk7CisKKyAgICAgICAgICAjIEhhdmUgd2UgYWxyZWFkeSBzcG90dGVkIHRoaXMgdW5oYW5kbGVkIGF0dHJpYnV0ZT8KKyAgICAgICAgICBuZXh0IGlmIChkZWZpbmVkICRhdHRyaWJ1dGVzX25vdF9oYW5kbGVkeyQxfSk7CisgICAgICAgICAgJGF0dHJpYnV0ZXNfbm90X2hhbmRsZWR7JDF9ID0gMTsKKworICAgICAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgZmlsZS4KKyAgICAgICAgICBteSAkZGlyID0gIiRIdG1sRGlyL2ZhaWx1cmVzIjsKKyAgICAgICAgICBteSAkYWZpbGUgPSAiJGRpci9hdHRyaWJ1dGVfaWdub3JlZF8kMS50eHQiOworCisgICAgICAgICAgIyBPbmx5IGNyZWF0ZSBhbm90aGVyIHByZXByb2Nlc3NlZCBmaWxlIGlmIHRoZSBhdHRyaWJ1dGUgZmlsZQorICAgICAgICAgICMgZG9lc24ndCBleGlzdCB5ZXQuCisgICAgICAgICAgbmV4dCBpZiAoLWUgJGFmaWxlKTsKKworICAgICAgICAgICMgQWRkIHRoaXMgZmlsZSB0byB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IGNvbnRhaW5lZCB0aGlzIGF0dHJpYnV0ZS4KKyAgICAgICAgICAjIEdlbmVyYXRlIGEgcHJlcHJvY2Vzc2VkIGZpbGUgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgorICAgICAgICAgIGlmICghKGRlZmluZWQgJHBwZmlsZSkpIHsKKyAgICAgICAgICAgICRwcGZpbGUgPSBQcm9jZXNzQ2xhbmdGYWlsdXJlKCRDbGFuZywgJExhbmcsICRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEBDbWRBcmdzU2Fuc0FuYWx5c2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEh0bWxEaXIsICRBdHRyaWJ1dGVJZ25vcmVkLCAkb2ZpbGUpOworICAgICAgICAgIH0KKworICAgICAgICAgIG1rcGF0aCAkZGlyOworICAgICAgICAgIG9wZW4oQUZJTEUsICI+JGFmaWxlIik7CisgICAgICAgICAgcHJpbnQgQUZJTEUgIiRwcGZpbGVcbiI7CisgICAgICAgICAgY2xvc2UoQUZJTEUpOworICAgICAgICB9CisgICAgICAgIGNsb3NlIENISUxEOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHVubGluaygkb2ZpbGUpOworfQorCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyAgTG9va3VwIHRhYmxlcy4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK215ICVDb21waWxlT3B0aW9uTWFwID0gKAorICAnLW5vc3RkaW5jJyA9PiAwLAorICAnLWluY2x1ZGUnID0+IDEsCisgICctaWRpcmFmdGVyJyA9PiAxLAorICAnLWltYWNyb3MnID0+IDEsCisgICctaXByZWZpeCcgPT4gMSwKKyAgJy1pcXVvdGUnID0+IDEsCisgICctaXdpdGhwcmVmaXgnID0+IDEsCisgICctaXdpdGhwcmVmaXhiZWZvcmUnID0+IDEKKyk7CisKK215ICVMaW5rZXJPcHRpb25NYXAgPSAoCisgICctZnJhbWV3b3JrJyA9PiAxLAorICAnLWZvYmpjLWxpbmstcnVudGltZScgPT4gMAorKTsKKworbXkgJUNvbXBpbGVyTGlua2VyT3B0aW9uTWFwID0gKAorICAnLVd3cml0ZS1zdHJpbmdzJyA9PiAwLAorICAnLWZ0cmFwdi1oYW5kbGVyJyA9PiAxLCAjIHNwZWNpZmljYWxseSBjYWxsIG91dCBzZXBhcmF0ZWQgLWYgZmxhZworICAnLW1pb3Mtc2ltdWxhdG9yLXZlcnNpb24tbWluJyA9PiAwLCAjIFRoaXMgcmVhbGx5IGhhcyAxIGFyZ3VtZW50LCBidXQgYWx3YXlzIGhhcyAnPScKKyAgJy1pc3lzcm9vdCcgPT4gMSwKKyAgJy1hcmNoJyA9PiAxLAorICAnLW0zMicgPT4gMCwKKyAgJy1tNjQnID0+IDAsCisgICctc3RkbGliJyA9PiAwLCAjIFRoaXMgaXMgcmVhbGx5IGEgMSBhcmd1bWVudCwgYnV0IGFsd2F5cyBoYXMgJz0nCisgICctLXN5c3Jvb3QnID0+IDEsCisgICctdGFyZ2V0JyA9PiAxLAorICAnLXYnID0+IDAsCisgICctbW1hY29zeC12ZXJzaW9uLW1pbicgPT4gMCwgIyBUaGlzIGlzIHJlYWxseSBhIDEgYXJndW1lbnQsIGJ1dCBhbHdheXMgaGFzICc9JworICAnLW1pcGhvbmVvcy12ZXJzaW9uLW1pbicgPT4gMCAjIFRoaXMgaXMgcmVhbGx5IGEgMSBhcmd1bWVudCwgYnV0IGFsd2F5cyBoYXMgJz0nCispOworCitteSAlSWdub3JlZE9wdGlvbk1hcCA9ICgKKyAgJy1NVCcgPT4gMSwgICMgSWdub3JlIHRoZXNlIHByZXByb2Nlc3NvciBvcHRpb25zLgorICAnLU1GJyA9PiAxLAorCisgICctZnN5bnRheC1vbmx5JyA9PiAwLAorICAnLXNhdmUtdGVtcHMnID0+IDAsCisgICctaW5zdGFsbF9uYW1lJyA9PiAxLAorICAnLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCcgPT4gMSwKKyAgJy1jdXJyZW50X3ZlcnNpb24nID0+IDEsCisgICctY29tcGF0aWJpbGl0eV92ZXJzaW9uJyA9PiAxLAorICAnLWluaXQnID0+IDEsCisgICctZScgPT4gMSwKKyAgJy1zZWcxYWRkcicgPT4gMSwKKyAgJy1idW5kbGVfbG9hZGVyJyA9PiAxLAorICAnLW11bHRpcGx5X2RlZmluZWQnID0+IDEsCisgICctc2VjdG9yZGVyJyA9PiAzLAorICAnLS1wYXJhbScgPT4gMSwKKyAgJy11JyA9PiAxLAorICAnLS1zZXJpYWxpemUtZGlhZ25vc3RpY3MnID0+IDEKKyk7CisKK215ICVMYW5nTWFwID0gKAorICAnYycgICA9PiAkSXNDWFggPyAnYysrJyA6ICdjJywKKyAgJ2NwJyAgPT4gJ2MrKycsCisgICdjcHAnID0+ICdjKysnLAorICAnY3h4JyA9PiAnYysrJywKKyAgJ3R4eCcgPT4gJ2MrKycsCisgICdjYycgID0+ICdjKysnLAorICAnQycgICA9PiAnYysrJywKKyAgJ2lpJyAgPT4gJ2MrKy1jcHAtb3V0cHV0JywKKyAgJ2knICAgPT4gJElzQ1hYID8gJ2MrKy1jcHAtb3V0cHV0JyA6ICdjLWNwcC1vdXRwdXQnLAorICAnbScgICA9PiAnb2JqZWN0aXZlLWMnLAorICAnbWknICA9PiAnb2JqZWN0aXZlLWMtY3BwLW91dHB1dCcsCisgICdtbScgID0+ICdvYmplY3RpdmUtYysrJywKKyAgJ21paScgPT4gJ29iamVjdGl2ZS1jKystY3BwLW91dHB1dCcsCispOworCitteSAlVW5pcXVlT3B0aW9ucyA9ICgKKyAgJy1pc3lzcm9vdCcgPT4gMAorKTsKKworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMgTGFuZ3VhZ2VzIGFjY2VwdGVkLgorIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworbXkgJUxhbmdzQWNjZXB0ZWQgPSAoCisgICJvYmplY3RpdmUtYyIgPT4gMSwKKyAgImMiID0+IDEsCisgICJjKysiID0+IDEsCisgICJvYmplY3RpdmUtYysrIiA9PiAxLAorICAiYy1jcHAtb3V0cHV0IiA9PiAxLAorICAib2JqZWN0aXZlLWMtY3BwLW91dHB1dCIgPT4gMSwKKyAgImMrKy1jcHAtb3V0cHV0IiA9PiAxCispOworCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyAgTWFpbiBMb2dpYy4KKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKK215ICRBY3Rpb24gPSAnbGluayc7CitteSBAQ29tcGlsZU9wdHM7CitteSBATGlua09wdHM7CitteSBARmlsZXM7CitteSAkTGFuZzsKK215ICRPdXRwdXQ7CitteSAlVW5pcXVlZDsKKworIyBGb3J3YXJkIGFyZ3VtZW50cyB0byBnY2MuCitteSAkU3RhdHVzID0gc3lzdGVtKCRDb21waWxlcixAQVJHVik7CitpZiAoZGVmaW5lZCAkRU5WeydDQ0NfQU5BTFlaRVJfTE9HJ30pIHsKKyAgcHJpbnQgU1RERVJSICIkQ29tcGlsZXIgQEFSR1ZcbiI7Cit9CitpZiAoJFN0YXR1cykgeyBleGl0KCRTdGF0dXMgPj4gOCk7IH0KKworIyBHZXQgdGhlIGFuYWx5c2lzIG9wdGlvbnMuCitteSAkQW5hbHlzZXMgPSAkRU5WeydDQ0NfQU5BTFlaRVJfQU5BTFlTSVMnfTsKKworIyBHZXQgdGhlIHBsdWdpbnMgdG8gbG9hZC4KK215ICRQbHVnaW5zID0gJEVOVnsnQ0NDX0FOQUxZWkVSX1BMVUdJTlMnfTsKKworIyBHZXQgdGhlIHN0b3JlIG1vZGVsLgorbXkgJFN0b3JlTW9kZWwgPSAkRU5WeydDQ0NfQU5BTFlaRVJfU1RPUkVfTU9ERUwnfTsKKworIyBHZXQgdGhlIGNvbnN0cmFpbnRzIGVuZ2luZS4KK215ICRDb25zdHJhaW50c01vZGVsID0gJEVOVnsnQ0NDX0FOQUxZWkVSX0NPTlNUUkFJTlRTX01PREVMJ307CisKKyNHZXQgdGhlIGludGVybmFsIHN0YXRzIHNldHRpbmcuCitteSAkSW50ZXJuYWxTdGF0cyA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9JTlRFUk5BTF9TVEFUUyd9OworCisjIEdldCB0aGUgb3V0cHV0IGZvcm1hdC4KK215ICRPdXRwdXRGb3JtYXQgPSAkRU5WeydDQ0NfQU5BTFlaRVJfT1VUUFVUX0ZPUk1BVCd9OworaWYgKCFkZWZpbmVkICRPdXRwdXRGb3JtYXQpIHsgJE91dHB1dEZvcm1hdCA9ICJodG1sIjsgfQorCisjIEdldCB0aGUgY29uZmlnIG9wdGlvbnMuCitteSAkQ29uZmlnT3B0aW9ucyA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9DT05GSUcnfTsKKworIyBEZXRlcm1pbmUgdGhlIGxldmVsIG9mIHZlcmJvc2l0eS4KK215ICRWZXJib3NlID0gMDsKK2lmIChkZWZpbmVkICRFTlZ7J0NDQ19BTkFMWVpFUl9WRVJCT1NFJ30pIHsgJFZlcmJvc2UgPSAxOyB9CitpZiAoZGVmaW5lZCAkRU5WeydDQ0NfQU5BTFlaRVJfTE9HJ30pIHsgJFZlcmJvc2UgPSAyOyB9CisKKyMgR2V0IHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkuCitteSAkSHRtbERpciA9ICRFTlZ7J0NDQ19BTkFMWVpFUl9IVE1MJ307CisKK215ICVEaXNhYmxlZEFyY2hzID0gKCdwcGMnID0+IDEsICdwcGM2NCcgPT4gMSk7CitteSAlQXJjaHNTZWVuOworbXkgJEhhZEFyY2ggPSAwOworbXkgJEhhc1NESyA9IDA7CisKKyMgUHJvY2VzcyB0aGUgYXJndW1lbnRzLgorZm9yZWFjaCAobXkgJGkgPSAwOyAkaSA8IHNjYWxhcihAQVJHVik7ICsrJGkpIHsKKyAgbXkgJEFyZyA9ICRBUkdWWyRpXTsKKyAgbXkgKCRBcmdLZXkpID0gc3BsaXQgLz0vLCRBcmcsMjsKKworICAjIEJlIGZyaWVuZGx5IHRvICIiIGluIHRoZSBhcmd1bWVudCBsaXN0LgorICBpZiAoIWRlZmluZWQoJEFyZ0tleSkpIHsKKyAgICBuZXh0OworICB9CisKKyAgIyBNb2RlcyBjY2MtYW5hbHl6ZXIgc3VwcG9ydHMKKyAgaWYgKCRBcmcgPX4gL14tKEV8TU0/KSQvKSB7ICRBY3Rpb24gPSAncHJlcHJvY2Vzcyc7IH0KKyAgZWxzaWYgKCRBcmcgZXEgJy1jJykgeyAkQWN0aW9uID0gJ2NvbXBpbGUnOyB9CisgIGVsc2lmICgkQXJnID1+IC9eLXByaW50LXByb2ctbmFtZS8pIHsgZXhpdCAwOyB9CisKKyAgIyBTcGVjaWFsbHkgaGFuZGxlIGR1cGxpY2F0ZSBjYXNlcyBvZiAtYXJjaAorICBpZiAoJEFyZyBlcSAiLWFyY2giKSB7CisgICAgbXkgJGFyY2ggPSAkQVJHVlskaSsxXTsKKyAgICAjIFdlIGRvbid0IHdhbnQgdG8gcHJvY2VzcyAncHBjJyBiZWNhdXNlIG9mIENsYW5nJ3MgbGFjayBvZiBzdXBwb3J0CisgICAgIyBmb3IgQWx0aXZlYyAoYWxzbyBzb21lICNkZWZpbmVzIHdvbid0IGxpa2VseSBiZSBkZWZpbmVkIGNvcnJlY3RseSwgZXRjLikKKyAgICBpZiAoIShkZWZpbmVkICREaXNhYmxlZEFyY2hzeyRhcmNofSkpIHsgJEFyY2hzU2VlbnskYXJjaH0gPSAxOyB9CisgICAgJEhhZEFyY2ggPSAxOworICAgICsrJGk7CisgICAgbmV4dDsKKyAgfQorCisgICMgT24gT1NYL2lPUywgcmVjb3JkIGlmIGFuIFNESyBwYXRoIHdhcyBzcGVjaWZpZWQuICBUaGlzCisgICMgaXMgaW5ub2N1b3VzIGZvciBvdGhlciBwbGF0Zm9ybXMsIHNvIHRoZSBjaGVjayBqdXN0IGhhcHBlbnMuCisgIGlmICgkQXJnID1+IC9eLWlzeXNyb290LykgeworICAgICRIYXNTREsgPSAxOworICB9CisKKyAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBjb21waWxlci4KKyAgaWYgKGRlZmluZWQgJENvbXBpbGVPcHRpb25NYXB7JEFyZ0tleX0pIHsKKyAgICBteSAkQ250ID0gJENvbXBpbGVPcHRpb25NYXB7JEFyZ0tleX07CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKKyAgICB3aGlsZSAoJENudCA+IDApIHsgKyskaTsgLS0kQ250OyBwdXNoIEBDb21waWxlT3B0cywgJEFSR1ZbJGldOyB9CisgICAgbmV4dDsKKyAgfQorICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpc24ndCBhIHNwYWNlIGFmdGVyIC1pcXVvdGUKKyAgaWYgKCRBcmcgPX4gL14taXF1b3RlLiovKSB7CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsKKyAgICBuZXh0OworICB9CisKKyAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBsaW5rZXIuCisgIGlmIChkZWZpbmVkICRMaW5rZXJPcHRpb25NYXB7JEFyZ0tleX0pIHsKKyAgICBteSAkQ250ID0gJExpbmtlck9wdGlvbk1hcHskQXJnS2V5fTsKKyAgICBwdXNoIEBMaW5rT3B0cywkQXJnOworICAgIHdoaWxlICgkQ250ID4gMCkgeyArKyRpOyAtLSRDbnQ7IHB1c2ggQExpbmtPcHRzLCAkQVJHVlskaV07IH0KKyAgICBuZXh0OworICB9CisKKyAgIyBPcHRpb25zIHdpdGggcG9zc2libGUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIHBhc3MgdGhyb3VnaCB0byBib3RoIGNvbXBpbGVyCisgICMgYW5kIHRoZSBsaW5rZXIuCisgIGlmIChkZWZpbmVkICRDb21waWxlckxpbmtlck9wdGlvbk1hcHskQXJnS2V5fSkgeworICAgIG15ICRDbnQgPSAkQ29tcGlsZXJMaW5rZXJPcHRpb25NYXB7JEFyZ0tleX07CisKKyAgICAjIENoZWNrIGlmIHRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgc2hvdWxkIGhhdmUgYSB1bmlxdWUgdmFsdWUsIGFuZCBpZiBzbworICAgICMgZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSB3YXMgY2hlY2tlZCBiZWZvcmUuCisgICAgaWYgKCRVbmlxdWVPcHRpb25zeyRBcmd9KSB7CisgICAgICBpZiAoZGVmaW5lZCAkVW5pcXVlZHskQXJnfSkgeworICAgICAgICAkaSArPSAkQ250OworICAgICAgICBuZXh0OworICAgICAgfQorICAgICAgJFVuaXF1ZWR7JEFyZ30gPSAxOworICAgIH0KKworICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7CisgICAgcHVzaCBATGlua09wdHMsJEFyZzsKKworICAgIHdoaWxlICgkQ250ID4gMCkgeworICAgICAgKyskaTsgLS0kQ250OworICAgICAgcHVzaCBAQ29tcGlsZU9wdHMsICRBUkdWWyRpXTsKKyAgICAgIHB1c2ggQExpbmtPcHRzLCAkQVJHVlskaV07CisgICAgfQorICAgIG5leHQ7CisgIH0KKworICAjIElnbm9yZWQgb3B0aW9ucy4KKyAgaWYgKGRlZmluZWQgJElnbm9yZWRPcHRpb25NYXB7JEFyZ0tleX0pIHsKKyAgICBteSAkQ250ID0gJElnbm9yZWRPcHRpb25NYXB7JEFyZ0tleX07CisgICAgd2hpbGUgKCRDbnQgPiAwKSB7CisgICAgICArKyRpOyAtLSRDbnQ7CisgICAgfQorICAgIG5leHQ7CisgIH0KKworICAjIENvbXBpbGUgbW9kZSBmbGFncy4KKyAgaWYgKCRBcmcgPX4gL14tKD86W0RJVV18aXN5c3RlbSkoLiopJC8pIHsKKyAgICBteSAkVG1wID0gJEFyZzsKKyAgICBpZiAoJDEgZXEgJycpIHsKKyAgICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KKyAgICAgICsrJGk7CisgICAgICAkVG1wID0gJEFyZyAuICRBUkdWWyRpXTsKKyAgICB9CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJFRtcDsKKyAgICBuZXh0OworICB9CisKKyAgaWYgKCRBcmcgPX4gL14tbS4qLykgeworICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7CisgICAgbmV4dDsKKyAgfQorCisgICMgTGFuZ3VhZ2UuCisgIGlmICgkQXJnIGVxICcteCcpIHsKKyAgICAkTGFuZyA9ICRBUkdWWyRpKzFdOworICAgICsrJGk7IG5leHQ7CisgIH0KKworICAjIE91dHB1dCBmaWxlLgorICBpZiAoJEFyZyBlcSAnLW8nKSB7CisgICAgKyskaTsKKyAgICAkT3V0cHV0ID0gJEFSR1ZbJGldOworICAgIG5leHQ7CisgIH0KKworICAjIEdldCB0aGUgbGluayBtb2RlLgorICBpZiAoJEFyZyA9fiAvXi1bbCxMLE9dLykgeworICAgIGlmICgkQXJnIGVxICctTycpIHsgcHVzaCBATGlua09wdHMsJy1PMSc7IH0KKyAgICBlbHNpZiAoJEFyZyBlcSAnLU9zJykgeyBwdXNoIEBMaW5rT3B0cywnLU8yJzsgfQorICAgIGVsc2UgeyBwdXNoIEBMaW5rT3B0cywkQXJnOyB9CisKKyAgICAjIE11c3QgcGFzcyB0aGlzIGFsb25nIGZvciB0aGUgX19PUFRJTUlaRV9fIG1hY3JvCisgICAgaWYgKCRBcmcgPX4gL14tTy8pIHsgcHVzaCBAQ29tcGlsZU9wdHMsJEFyZzsgfQorICAgIG5leHQ7CisgIH0KKworICBpZiAoJEFyZyA9fiAvXi1zdGQ9LykgeworICAgIHB1c2ggQENvbXBpbGVPcHRzLCRBcmc7CisgICAgbmV4dDsKKyAgfQorCisgICMgR2V0IHRoZSBjb21waWxlci9saW5rIG1vZGUuCisgIGlmICgkQXJnID1+IC9eLUYoLispJC8pIHsKKyAgICBteSAkVG1wID0gJEFyZzsKKyAgICBpZiAoJDEgZXEgJycpIHsKKyAgICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KKyAgICAgICsrJGk7CisgICAgICAkVG1wID0gJEFyZyAuICRBUkdWWyRpXTsKKyAgICB9CisgICAgcHVzaCBAQ29tcGlsZU9wdHMsJFRtcDsKKyAgICBwdXNoIEBMaW5rT3B0cywkVG1wOworICAgIG5leHQ7CisgIH0KKworICAjIElucHV0IGZpbGVzLgorICBpZiAoJEFyZyBlcSAnLWZpbGVsaXN0JykgeworICAgICMgRklYTUU6IE1ha2Ugc3VyZSB3ZSBhcmVuJ3Qgd2Fsa2luZyBvZmYgdGhlIGVuZC4KKyAgICBvcGVuKElOLCAkQVJHVlskaSsxXSk7CisgICAgd2hpbGUgKDxJTj4pIHsgcy9cMDE1P1wwMTIvLzsgcHVzaCBARmlsZXMsJF87IH0KKyAgICBjbG9zZShJTik7CisgICAgKyskaTsKKyAgICBuZXh0OworICB9CisKKyAgaWYgKCRBcmcgPX4gL14tZi8pIHsKKyAgICBwdXNoIEBDb21waWxlT3B0cywkQXJnOworICAgIHB1c2ggQExpbmtPcHRzLCRBcmc7CisgICAgbmV4dDsKKyAgfQorCisgICMgSGFuZGxlIC1Xbm8tLiAgV2UgZG9uJ3QgY2FyZSBhYm91dCBleHRyYSB3YXJuaW5ncywgYnV0CisgICMgd2Ugc2hvdWxkIHN1cHByZXNzIG9uZXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHNlZS4KKyAgaWYgKCRBcmcgPX4gL14tV25vLS8pIHsKKyAgICBwdXNoIEBDb21waWxlT3B0cywgJEFyZzsKKyAgICBuZXh0OworICB9CisKKyAgIyBIYW5kbGUgLVhjbGFuZyBzb21lLWFyZy4gQWRkIGJvdGggYXJndW1lbnRzIHRvIHRoZSBjb21waWxlciBvcHRpb25zLgorICBpZiAoJEFyZyA9fiAvXi1YY2xhbmckLykgeworICAgICMgRklYTUU6IENoZWNrIGlmIHdlIGFyZSBnb2luZyBvZmYgdGhlIGVuZC4KKyAgICArKyRpOworICAgIHB1c2ggQENvbXBpbGVPcHRzLCAkQXJnOworICAgIHB1c2ggQENvbXBpbGVPcHRzLCAkQVJHVlskaV07CisgICAgbmV4dDsKKyAgfQorCisgIGlmICghKCRBcmcgPX4gL14tLykpIHsKKyAgICBwdXNoIEBGaWxlcywgJEFyZzsKKyAgICBuZXh0OworICB9Cit9CisKKyMgSWYgd2UgYXJlIG9uIE9TWCBhbmQgaGF2ZSBhbiBpbnN0YWxsYXRpb24gd2hlcmUgdGhlCisjIGRlZmF1bHQgU0RLIGlzIGluZmVycmVkIGJ5IHhjcnVuIHVzZSB4Y3J1biB0byBpbmZlcgorIyB0aGUgU0RLLgoraWYgKG5vdCAkSGFzU0RLIGFuZCAkVXNlWENSVU4pIHsKKyAgbXkgJHNkayA9IGAvdXNyL2Jpbi94Y3J1biAtLXNob3ctc2RrLXBhdGggLXNkayBtYWNvc3hgOworICBjaG9tcCAkc2RrOworICBwdXNoIEBDb21waWxlT3B0cywgIi1pc3lzcm9vdCIsICRzZGs7Cit9CisKK2lmICgkQWN0aW9uIGVxICdjb21waWxlJyBvciAkQWN0aW9uIGVxICdsaW5rJykgeworICBteSBAQXJjaHMgPSBrZXlzICVBcmNoc1NlZW47CisgICMgU2tpcCB0aGUgZmlsZSBpZiB3ZSBkb24ndCBzdXBwb3J0IHRoZSBhcmNoaXRlY3R1cmVzIHNwZWNpZmllZC4KKyAgZXhpdCAwIGlmICgkSGFkQXJjaCAmJiBzY2FsYXIoQEFyY2hzKSA9PSAwKTsKKworICBmb3JlYWNoIG15ICRmaWxlIChARmlsZXMpIHsKKyAgICAjIERldGVybWluZSB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBmaWxlLgorICAgIG15ICRGaWxlTGFuZyA9ICRMYW5nOworCisgICAgaWYgKCFkZWZpbmVkKCRGaWxlTGFuZykpIHsKKyAgICAgICMgSW5mZXIgdGhlIGxhbmd1YWdlIGZyb20gdGhlIGV4dGVuc2lvbi4KKyAgICAgIGlmICgkZmlsZSA9fiAvWy5dKFteLl0rKSQvKSB7CisgICAgICAgICRGaWxlTGFuZyA9ICRMYW5nTWFweyQxfTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAjIEZpbGVMYW5nIHN0aWxsIG5vdCBkZWZpbmVkPyAgU2tpcCB0aGUgZmlsZS4KKyAgICBuZXh0IGlmICghZGVmaW5lZCAkRmlsZUxhbmcpOworCisgICAgIyBMYW5ndWFnZSBub3QgYWNjZXB0ZWQ/CisgICAgbmV4dCBpZiAoIWRlZmluZWQgJExhbmdzQWNjZXB0ZWR7JEZpbGVMYW5nfSk7CisKKyAgICBteSBAQ21kQXJnczsKKyAgICBteSBAQW5hbHl6ZUFyZ3M7CisKKyAgICBpZiAoJEZpbGVMYW5nIG5lICd1bmtub3duJykgeworICAgICAgcHVzaCBAQ21kQXJncywgJy14JywgJEZpbGVMYW5nOworICAgIH0KKworICAgIGlmIChkZWZpbmVkICRTdG9yZU1vZGVsKSB7CisgICAgICBwdXNoIEBBbmFseXplQXJncywgIi1hbmFseXplci1zdG9yZT0kU3RvcmVNb2RlbCI7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJENvbnN0cmFpbnRzTW9kZWwpIHsKKyAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCAiLWFuYWx5emVyLWNvbnN0cmFpbnRzPSRDb25zdHJhaW50c01vZGVsIjsKKyAgICB9CisKKyAgICBpZiAoZGVmaW5lZCAkSW50ZXJuYWxTdGF0cykgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsICItYW5hbHl6ZXItc3RhdHMiOworICAgIH0KKworICAgIGlmIChkZWZpbmVkICRBbmFseXNlcykgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsIHNwbGl0ICdccysnLCAkQW5hbHlzZXM7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJFBsdWdpbnMpIHsKKyAgICAgIHB1c2ggQEFuYWx5emVBcmdzLCBzcGxpdCAnXHMrJywgJFBsdWdpbnM7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQgJE91dHB1dEZvcm1hdCkgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsICItYW5hbHl6ZXItb3V0cHV0PSIgLiAkT3V0cHV0Rm9ybWF0OworICAgICAgaWYgKCRPdXRwdXRGb3JtYXQgPX4gL3BsaXN0LykgeworICAgICAgICAjIENoYW5nZSAiT3V0cHV0IiB0byBiZSBhIGZpbGUuCisgICAgICAgIG15ICgkaCwgJGYpID0gdGVtcGZpbGUoInJlcG9ydC1YWFhYWFgiLCBTVUZGSVggPT4gIi5wbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSID0+ICRIdG1sRGlyKTsKKyAgICAgICAgJFJlc3VsdEZpbGUgPSAkZjsKKyAgICAgICAgIyBJZiB0aGUgSHRtbERpciBpcyBub3Qgc2V0LCB3ZSBzaG91bGQgY2xlYW4gdXAgdGhlIHBsaXN0IGZpbGVzLgorICAgICAgICBpZiAoIWRlZmluZWQgJEh0bWxEaXIgfHwgLXogJEh0bWxEaXIpIHsKKyAgICAgICAgICAkQ2xlYW51cEZpbGUgPSAkZjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoZGVmaW5lZCAkQ29uZmlnT3B0aW9ucykgeworICAgICAgcHVzaCBAQW5hbHl6ZUFyZ3MsIHNwbGl0ICdccysnLCAkQ29uZmlnT3B0aW9uczsKKyAgICB9CisKKyAgICBwdXNoIEBDbWRBcmdzLCBAQ29tcGlsZU9wdHM7CisgICAgcHVzaCBAQ21kQXJncywgJGZpbGU7CisKKyAgICBpZiAoc2NhbGFyIEBBcmNocykgeworICAgICAgZm9yZWFjaCBteSAkYXJjaCAoQEFyY2hzKSB7CisgICAgICAgIG15IEBOZXdBcmdzOworICAgICAgICBwdXNoIEBOZXdBcmdzLCAnLWFyY2gnLCAkYXJjaDsKKyAgICAgICAgcHVzaCBATmV3QXJncywgQENtZEFyZ3M7CisgICAgICAgIEFuYWx5emUoJENsYW5nLCBcQE5ld0FyZ3MsIFxAQW5hbHl6ZUFyZ3MsICRGaWxlTGFuZywgJE91dHB1dCwKKyAgICAgICAgICAgICAgICAkVmVyYm9zZSwgJEh0bWxEaXIsICRmaWxlKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBBbmFseXplKCRDbGFuZywgXEBDbWRBcmdzLCBcQEFuYWx5emVBcmdzLCAkRmlsZUxhbmcsICRPdXRwdXQsCisgICAgICAgICAgICAgICRWZXJib3NlLCAkSHRtbERpciwgJGZpbGUpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL2xpYmV4ZWMvY2NjLWFuYWx5emVyLmJhdCBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplci5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4NTM3NgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9saWJleGVjL2NjYy1hbmFseXplci5iYXQKQEAgLTAsMCArMSBAQAorcGVybCAtUyBjY2MtYW5hbHl6ZXIgJSoNCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvbWFuL3NjYW4tYnVpbGQuMSBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9tYW4vc2Nhbi1idWlsZC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkM2E5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvbWFuL3NjYW4tYnVpbGQuMQpAQCAtMCwwICsxLDM0OSBAQAorLlwiIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLlwiIExpY2Vuc2UuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4KKy5cIiAkSWQkCisuRGQgTWF5IDI1LCAyMDEyCisuRHQgU0NBTi1CVUlMRCAxCisuT3MgImNsYW5nIiAiMy41IgorLlNoIE5BTUUKKy5ObSBzY2FuLWJ1aWxkCisuTmQgQ2xhbmcgc3RhdGljIGFuYWx5emVyCisuU2ggU1lOT1BTSVMKKy5ObQorLk9wIEZsIG9oa3ZWCisuT3AgRmwgYW5hbHl6ZS1oZWFkZXJzCisuT3AgRmwgZW5hYmxlLWNoZWNrZXIgT3AgQXIgY2hlY2tlcl9uYW1lCisuT3AgRmwgZGlzYWJsZS1jaGVja2VyIE9wIEFyIGNoZWNrZXJfbmFtZQorLk9wIEZsIEZsIGhlbHAKKy5PcCBGbCBGbCBoZWxwLWNoZWNrZXJzCisuT3AgRmwgRmwgaHRtbC10aXRsZSBPcCBBciA9dGl0bGUKKy5PcCBGbCBGbCBrZWVwLWdvaW5nCisuT3AgRmwgcGxpc3QKKy5PcCBGbCBwbGlzdC1odG1sCisuT3AgRmwgRmwgc3RhdHVzLWJ1Z3MKKy5PcCBGbCBGbCB1c2UtYysrIE9wIEFyID1jb21waWxlcl9wYXRoCisuT3AgRmwgRmwgdXNlLWNjIE9wIEFyID1jb21waWxlcl9wYXRoCisuT3AgRmwgRmwgdmlldworLk9wIEZsIGNvbnN0cmFpbnRzIE9wIEFyIG1vZGVsCisuT3AgRmwgbWF4bG9vcCBBciBOCisuT3AgRmwgbm8tZmFpbHVyZS1yZXBvcnRzCisuT3AgRmwgc3RhdHMKKy5PcCBGbCBzdG9yZSBPcCBBciBtb2RlbAorLkFyIGJ1aWxkX2NvbW1hbmQKKy5PcCBidWlsZF9vcHRpb25zCisuXCIKKy5cIiBTaCBERVNDUklQVElPTgorLlNoIERFU0NSSVBUSU9OCisuTm0KK2lzIGEgUGVybCBzY3JpcHQgdGhhdCBpbnZva2VzIHRoZSBDbGFuZyBzdGF0aWMgYW5hbHl6ZXIuICBPcHRpb25zIHVzZWQgYnkKKy5ObQorb3IgYnkgdGhlIGFuYWx5emVyIGFwcGVhciBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlCisuQXIgYnVpbGRfY29tbWFuZAorYW5kIGFueQorLkFyIGJ1aWxkX29wdGlvbnMKK25vcm1hbGx5IHVzZWQgdG8gYnVpbGQgdGhlIHRhcmdldCBzeXN0ZW0uCisuUHAKK1RoZSBzdGF0aWMgYW5hbHl6ZXIgZW1wbG95cyBhIGxvbmcgbGlzdCBvZiBjaGVja2luZyBhbGdvcml0aG1zLCBzZWUKKy5TeCBDSEVDS0VSUyAuCitPdXRwdXQgY2FuIGJlIHdyaXR0ZW4gaW4gc3RhbmRhcmQKKy5MaSAucGxpc3QKK2FuZC9vciBIVE1MIGZvcm1hdC4KKy5QcAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuQmwgLXRhZyAtd2lkdGggaW5kZW50CisuSXQgRmwgYW5hbHl6ZS1oZWFkZXJzCitBbHNvIGFuYWx5emUgZnVuY3Rpb25zIGluICNpbmNsdWRlZCBmaWxlcy4KKy5JdCBGbCBlbmFibGUtY2hlY2tlciBBciBjaGVja2VyX25hbWUgLCBGbCBkaXNhYmxlLWNoZWNrZXIgQXIgY2hlY2tlcl9uYW1lCitFbmFibGUvZGlzYWJsZQorLkFyIGNoZWNrZXJfbmFtZSAuCitTZWUKKy5TeCBDSEVDS0VSUyAuCisuSXQgRmwgaCAsIEZsIEZsIGhlbHAKK0Rpc3BsYXkgdGhpcyBtZXNzYWdlLgorLkl0IEZsIEZsIGhlbHAtY2hlY2tlcnMKK0xpc3QgZGVmYXVsdCBjaGVja2Vycywgc2VlCisuU3ggQ0hFQ0tFUlMgLgorLkl0IEZsIEZsIGh0bWwtdGl0bGUgTnMgT3AgPSBOcyBBciB0aXRsZQorU3BlY2lmeSB0aGUgdGl0bGUgdXNlZCBvbiBnZW5lcmF0ZWQgSFRNTCBwYWdlcy4KK0EgZGVmYXVsdCB0aXRsZSBpcyBnZW5lcmF0ZWQgaWYKKy5BciB0aXRsZQoraXMgbm90IHNwZWNpZmllZC4KKy5JdCBGbCBrICwgRmwgRmwga2VlcC1nb2luZworQWRkIGEKKy5EcSBrZWVwIG9uIGdvaW5nCitvcHRpb24gdG8KKy5BciBidWlsZF9jb21tYW5kIC4KK0N1cnJlbnRseSBzdXBwb3J0cyBtYWtlIGFuZCB4Y29kZWJ1aWxkLiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugb3B0aW9uOworb25lIGNhbiBzcGVjaWZ5IHRoaXMgYmVoYXZpb3IgZGlyZWN0bHkgdXNpbmcgYnVpbGQgb3B0aW9ucy4KKy5JdCBGbCBvCitUYXJnZXQgZGlyZWN0b3J5IGZvciBIVE1MIHJlcG9ydCBmaWxlcy4gIFN1YmRpcmVjdG9yaWVzIHdpbGwgYmUKK2NyZWF0ZWQgYXMgbmVlZGVkIHRvIHJlcHJlc2VudCBzZXBhcmF0ZSBpbnZvY2F0aW9ucworb2YgdGhlIGFuYWx5emVyLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgYSBkaXJlY3RvcnkgaXMKK2NyZWF0ZWQgaW4gL3RtcCAoVE1QRElSIG9uIE1hYyBPUyBYKSB0byBzdG9yZSB0aGUgcmVwb3J0cy4KKy5JdCBGbCBwbGlzdAorT3V0cHV0IHRoZSByZXN1bHRzIGFzIGEgc2V0IG9mCisuTGkgLnBsaXN0CitmaWxlcy4gKEJ5IGRlZmF1bHQgdGhlIG91dHB1dCBvZgorLk5tCitpcyBhIHNldCBvZiBIVE1MIGZpbGVzLikKKy5JdCBGbCBwbGlzdC1odG1sCitPdXRwdXQgdGhlIHJlc3VsdHMgYXMgYSBzZXQgb2YgSFRNTCBhbmQgLnBsaXN0IGZpbGVzCisuSXQgRmwgRmwgc3RhdHVzLWJ1Z3MKK1NldCBleGl0IHN0YXR1cyB0byAxIGlmIGl0IGZvdW5kIHBvdGVudGlhbCBidWdzIGFuZCAwIG90aGVyd2lzZS4gQnkKK2RlZmF1bHQgdGhlIGV4aXQgc3RhdHVzIG9mCisuTm0KK2lzIHRoYXQgcmV0dXJuZWQgYnkKKy5BciBidWlsZF9jb21tYW5kIC4KKy5JdCBGbCBGbCB1c2UtYysrIE5zIE9wID0gTnMgQXIgY29tcGlsZXJfcGF0aAorR3Vlc3MgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHlvdXIgQysrIGFuZCBPYmplY3RpdmUtQysrIGNvZGUuIFVzZSB0aGlzCitvcHRpb24gdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGUgY29tcGlsZXIuCisuSXQgRmwgRmwgdXNlLWNjIE5zIE9wID0gTnMgQXIgY29tcGlsZXJfcGF0aAorR3Vlc3MgdGhlIGRlZmF1bHQgY29tcGlsZXIgZm9yIHlvdXIgQyBhbmQgT2JqZWN0aXZlLUMgY29kZS4gVXNlIHRoaXMKK29wdGlvbiB0byBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBjb21waWxlci4KKy5JdCBGbCB2CitWZXJib3NlIG91dHB1dCBmcm9tCisuTm0KK2FuZCB0aGUgYW5hbHl6ZXIuIEEgc2Vjb25kIGFuZAordGhpcmQKKy5BciB2CitpbmNyZWFzZXMgdmVyYm9zaXR5LgorLkl0IEZsIFYgLCBGbCBGbCB2aWV3CitWaWV3IGFuYWx5c2lzIHJlc3VsdHMgaW4gYSB3ZWIgYnJvd3NlciB3aGVuIHRoZSBidWlsZCBjb21wbGV0ZXMuCisuSXQgRmwgY29uc3RyYWludHMgT3AgQXIgbW9kZWwKK1NwZWNpZnkgdGhlIGNvbnRyYWludCBlbmdpbmUgdXNlZCBieSB0aGUgYW5hbHl6ZXIuICBCeSBkZWZhdWx0IHRoZQorLlFsIHJhbmdlCittb2RlbCBpcyB1c2VkLiAgU3BlY2lmeWluZworLlFsIGJhc2ljCit1c2VzIGEgc2ltcGxlciwgbGVzcyBwb3dlcmZ1bCBjb25zdHJhaW50IG1vZGVsIHVzZWQgYnkgY2hlY2tlci0wLjE2MAorYW5kIGVhcmxpZXIuCisuSXQgRmwgbWF4bG9vcCBBciBOCitTcGVjaWZpeSB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgYmxvY2sgY2FuIGJlIHZpc2l0ZWQgYmVmb3JlIGdpdmluZwordXAuIERlZmF1bHQgaXMgNC4gSW5jcmVhc2UgZm9yIG1vcmUgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSBhdCBhCitjb3N0IG9mIHNwZWVkLgorLkl0IEZsIG5vLWZhaWx1cmUtcmVwb3J0cworRG8gbm90IGNyZWF0ZSBhCisuUWwgZmFpbHVyZXMKK3N1YmRpcmVjdG9yeSB0aGF0IGluY2x1ZGVzIGFuYWx5emVyIGNyYXNoIHJlcG9ydHMgYW5kIHByZXByb2Nlc3NlZAorc291cmNlIGZpbGVzLgorLkl0IEZsIHN0YXRzCitHZW5lcmF0ZXMgdmlzaXRhdGlvbiBzdGF0aXN0aWNzIGZvciB0aGUgcHJvamVjdCBiZWluZyBhbmFseXplZC4KKy5JdCBGbCBzdG9yZSBPcCBBciBtb2RlbAorU3BlY2lmeSB0aGUgc3RvcmUgbW9kZWwgdXNlZCBieSB0aGUgYW5hbHl6ZXIuIEJ5IGRlZmF1bHQsIHRoZQorLlFsIHJlZ2lvbgorc3RvcmUgbW9kZWwgaXMgdXNlZC4KKy5RbCByZWdpb24KK3NwZWNpZmllcyBhIGZpZWxkLQorc2Vuc2l0aXZlIHN0b3JlIG1vZGVsLiBVc2VycyBjYW4gYWxzbyBzcGVjaWZ5CisuUWwgYmFzaWMKK3doaWNoIGlzIGZhciBsZXNzIHByZWNpc2UgYnV0IGNhbiBtb3JlIHF1aWNrbHkgYW5hbHl6ZSBjb2RlLgorLlFsIGJhc2ljCit3YXMgdGhlIGRlZmF1bHQgc3RvcmUgbW9kZWwgZm9yIGNoZWNrZXItMC4yMjEgYW5kIGVhcmxpZXIuCisuXCIKKy5FbAorLlNoIEVYSVQgU1RBVFVTCisuTm0KK3JldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGJ5CisuQXIgYnVpbGRfY29tbWFuZAordW5sZXNzCisuRmwgRmwgc3RhdHVzLWJ1Z3MKK29yCisuRmwgRmwga2VlcC1nb2luZworaXMgdXNlZC4KKy5cIgorLlwiIE90aGVyIHNlY3Rpb25zIG5vdCB5ZXQgdXNlZCAuLi4KKy5cIiAuU2ggRU5WSVJPTk1FTlQKKy5cIiAuU2ggRklMRVMKKy5cIiAuU2ggRElBR05PU1RJQ1MKKy5cIiAuU2ggQ09NUEFUSUJJTElUWQorLlwiIC5TaCBISVNUT1JZCisuXCIgLlNoIEJVR1MKKy5cIgorLlNoIENIRUNLRVJTCitUaGUgY2hlY2tlcnMgbGlzdGVkIGJlbG93IG1heSBiZSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZQorLkZsIGVuYWJsZS1jaGVja2VyCithbmQKKy5GbCBkaXNhYmxlLWNoZWNrZXIKK29wdGlvbnMuCitBIGRlZmF1bHQgZ3JvdXAgb2YgY2hlY2tlcnMgaXMgcnVuIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkLgorRXhhY3RseSB3aGljaCBjaGVja2VycyBjb25zdGl0dXRlIHRoZSBkZWZhdWx0IGdyb3VwIGlzIGEgZnVuY3Rpb24KK29mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluIHVzZTsgdGhleSBhcmUgbGlzdGVkIHdpdGgKKy5GbCBGbCBoZWxwLWNoZWNrZXJzIC4KKy5CbCAtdGFnIC13aWR0aCBpbmRlbnQuCisuSXQgY29yZS5BZGp1c3RlZFJldHVyblZhbHVlCitDaGVjayB0byBzZWUgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGNhbGwgaXMgZGlmZmVyZW50IHRoYW4KK3RoZSBjYWxsZXIgZXhwZWN0cyAoZS5nLiwgZnJvbSBjYWxscyB0aHJvdWdoIGZ1bmN0aW9uIHBvaW50ZXJzKS4KKy5JdCBjb3JlLkF0dHJpYnV0ZU5vbk51bGwKK0NoZWNrIGZvciBudWxsIHBvaW50ZXJzIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiB3aG9zZSBhcmd1bWVudHMgYXJlIG1hcmtlZCB3aXRoIHRoZQorLlFsIG5vbm51bGwKK2F0dHJpYnV0ZS4KKy5JdCBjb3JlLkNhbGxBbmRNZXNzYWdlCitDaGVjayBmb3IgbG9naWNhbCBlcnJvcnMgZm9yIGZ1bmN0aW9uIGNhbGxzIGFuZCBPYmplY3RpdmUtQyBtZXNzYWdlIGV4cHJlc3Npb25zIChlLmcuLCB1bmluaXRpYWxpemVkIGFyZ3VtZW50cywgbnVsbCBmdW5jdGlvbiBwb2ludGVycykuCisuSXQgY29yZS5EaXZpZGVaZXJvCitDaGVjayBmb3IgZGl2aXNpb24gYnkgemVyby4KKy5JdCBjb3JlLk51bGxEZXJlZmVyZW5jZQorQ2hlY2sgZm9yIGRlcmVmZXJlbmNlcyBvZiBudWxsIHBvaW50ZXJzLgorLkl0IGNvcmUuU3RhY2tBZGRyZXNzRXNjYXBlCitDaGVjayB0aGF0IGFkZHJlc3NlcyB0byBzdGFjayBtZW1vcnkgZG8gbm90IGVzY2FwZSB0aGUgZnVuY3Rpb24uCisuSXQgY29yZS5VbmRlZmluZWRCaW5hcnlPcGVyYXRvclJlc3VsdAorQ2hlY2sgZm9yIHVuZGVmaW5lZCByZXN1bHRzIG9mIGJpbmFyeSBvcGVyYXRvcnMuCisuSXQgY29yZS5WTEFTaXplCitDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9mIFZMQSBvZiB1bmRlZmluZWQgb3IgemVybyBzaXplLgorLkl0IGNvcmUuYnVpbHRpbi5CdWlsdGluRnVuY3Rpb25zCitFdmFsdWF0ZSBjb21waWxlciBidWlsdGluIGZ1bmN0aW9ucywgZS5nLgorLkZuIGFsbG9jYSAuCisuSXQgY29yZS5idWlsdGluLk5vUmV0dXJuRnVuY3Rpb25zCitFdmFsdWF0ZQorLlFsIHBhbmljCitmdW5jdGlvbnMgdGhhdCBhcmUga25vd24gdG8gbm90IHJldHVybiB0byB0aGUgY2FsbGVyLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5BcnJheVN1YnNjcmlwdAorQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHVzZWQgYXMgYXJyYXkgc3Vic2NyaXB0cy4KKy5JdCBjb3JlLnVuaW5pdGlhbGl6ZWQuQXNzaWduCitDaGVjayBmb3IgYXNzaWduaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5CcmFuY2gKK0NoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcyB1c2VkIGFzIGJyYW5jaCBjb25kaXRpb25zLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5DYXB0dXJlZEJsb2NrVmFyaWFibGUKK0NoZWNrIGZvciBibG9ja3MgdGhhdCBjYXB0dXJlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLgorLkl0IGNvcmUudW5pbml0aWFsaXplZC5VbmRlZlJldHVybgorQ2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGJlaW5nIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisuSXQgZGVhZGNvZGUuRGVhZFN0b3JlcworQ2hlY2sgZm9yIHZhbHVlcyBzdG9yZWQgdG8gdmFyaWFibGVzIHRoYXQgYXJlIG5ldmVyIHJlYWQgYWZ0ZXJ3YXJkcy4KKy5JdCBkZWJ1Zy5EdW1wQ0ZHCitEaXNwbGF5IENvbnRyb2wtRmxvdyBHcmFwaHMuCisuSXQgZGVidWcuRHVtcENhbGxHcmFwaAorRGlzcGxheSBDYWxsIEdyYXBoLgorLkl0IGRlYnVnLkR1bXBEb21pbmF0b3JzCitQcmludCB0aGUgZG9taW5hbmNlIHRyZWUgZm9yIGEgZ2l2ZW4gQ29udHJvbC1GbG93IEdyYXBoLgorLkl0IGRlYnVnLkR1bXBMaXZlVmFycworUHJpbnQgcmVzdWx0cyBvZiBsaXZlIHZhcmlhYmxlIGFuYWx5c2lzLgorLkl0IGRlYnVnLlN0YXRzCitFbWl0IHdhcm5pbmdzIHdpdGggYW5hbHl6ZXIgc3RhdGlzdGljcy4KKy5JdCBkZWJ1Zy5UYWludFRlc3QKK01hcmsgdGFpbnRlZCBzeW1ib2xzIGFzIHN1Y2guCisuSXQgZGVidWcuVmlld0NGRworVmlldyBDb250cm9sLUZsb3cgR3JhcGhzIHVzaW5nCisuSWMgR3JhcGhWaXogLgorLkl0IGRlYnVnLlZpZXdDYWxsR3JhcGgKK1ZpZXcgQ2FsbCBHcmFwaCB1c2luZworLkljIEdyYXBoVml6IC4KKy5JdCBsbHZtLkNvbnZlbnRpb25zCitDaGVjayBjb2RlIGZvciBMTFZNIGNvZGViYXNlIGNvbnZlbnRpb25zLgorLkl0IG9zeC5BUEkKK0NoZWNrIGZvciBwcm9wZXIgdXNlcyBvZiB2YXJpb3VzIE1hYyBPUyBYIEFQSXMuCisuSXQgb3N4LkF0b21pY0NBUworRXZhbHVhdGUgY2FsbHMgdG8KKy5WdCBPU0F0b21pYworZnVuY3Rpb25zLgorLkl0IG9zeC5TZWNLZXljaGFpbkFQSQorQ2hlY2sgZm9yIHByb3BlciB1c2VzIG9mIFNlY3VyZSBLZXljaGFpbiBBUElzLgorLkl0IG9zeC5jb2NvYS5BdFN5bmMKK0NoZWNrIGZvciBudWxsIHBvaW50ZXJzIHVzZWQgYXMgbXV0ZXhlcyBmb3IgQHN5bmNocm9uaXplZC4KKy5JdCBvc3guY29jb2EuQ2xhc3NSZWxlYXNlCitDaGVjayBmb3Igc2VuZGluZworLlFsIHJldGFpbiAsCisuUWwgcmVsZWFzZSwKK29yCisuUWwgYXV0b3JlbGVhc2UKK2RpcmVjdGx5IHRvIGEgQ2xhc3MuCisuSXQgb3N4LmNvY29hLkluY29tcGF0aWJsZU1ldGhvZFR5cGVzCitXYXJuIGFib3V0IE9iamVjdGl2ZS1DIG1ldGhvZCBzaWduYXR1cmVzIHdpdGggdHlwZSBpbmNvbXBhdGliaWxpdGllcy4KKy5JdCBvc3guY29jb2EuTlNBdXRvcmVsZWFzZVBvb2wKK1dhcm4gZm9yIHN1Ym9wdGltYWwgdXNlcyBvZgorLlZ0IE5TQXV0b3JlbGVhc2VQb29sCitpbiBPYmplY3RpdmUtQyBHQyBtb2RlLgorLkl0IG9zeC5jb2NvYS5OU0Vycm9yCitDaGVjayB1c2FnZSBvZiBOU0Vycm9yKiogcGFyYW1ldGVycy4KKy5JdCBvc3guY29jb2EuTmlsQXJnCitDaGVjayBmb3IgcHJvaGliaXRlZCBuaWwgYXJndW1lbnRzIHRvIE9iamVjdGl2ZS1DIG1ldGhvZCBjYWxscy4KKy5JdCBvc3guY29jb2EuUmV0YWluQ291bnQKK0NoZWNrIGZvciBsZWFrcyBhbmQgaW1wcm9wZXIgcmVmZXJlbmNlIGNvdW50IG1hbmFnZW1lbnQuCisuSXQgb3N4LmNvY29hLlNlbGZJbml0CitDaGVjayB0aGF0CisuUWwgc2VsZgoraXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW5zaWRlIGFuIGluaXRpYWxpemVyIG1ldGhvZC4KKy5JdCBvc3guY29jb2EuVW51c2VkSXZhcnMKK1dhcm4gYWJvdXQgcHJpdmF0ZSBpdmFycyB0aGF0IGFyZSBuZXZlciB1c2VkLgorLkl0IG9zeC5jb2NvYS5WYXJpYWRpY01ldGhvZFR5cGVzCitDaGVjayBmb3IgcGFzc2luZyBub24tT2JqZWN0aXZlLUMgdHlwZXMgdG8gdmFyaWFkaWMgbWV0aG9kcyB0aGF0IGV4cGVjdCBvbmx5IE9iamVjdGl2ZS1DIHR5cGVzLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRkVycm9yCitDaGVjayB1c2FnZSBvZiBDRkVycm9yUmVmKiBwYXJhbWV0ZXJzLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRk51bWJlcgorQ2hlY2sgZm9yIHByb3BlciB1c2VzIG9mCisuRm4gQ0ZOdW1iZXJDcmVhdGUgLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5DRlJldGFpblJlbGVhc2UKK0NoZWNrIGZvciBudWxsIGFyZ3VtZW50cyB0bworLkZuIENGUmV0YWluICwKKy5GbiBDRlJlbGVhc2UgLAorYW5kCisuRm4gQ0ZNYWtlQ29sbGVjdGFibGUgLgorLkl0IG9zeC5jb3JlRm91bmRhdGlvbi5jb250YWluZXJzLk91dE9mQm91bmRzCitDaGVja3MgZm9yIGluZGV4IG91dC1vZi1ib3VuZHMgd2hlbiB1c2luZyB0aGUKKy5WdCBDRkFycmF5CitBUEkuCisuSXQgb3N4LmNvcmVGb3VuZGF0aW9uLmNvbnRhaW5lcnMuUG9pbnRlclNpemVkVmFsdWVzCitXYXJucyBpZgorLlZ0IENGQXJyYXkgLAorLlZ0IENGRGljdGlvbmFyeSAsCitvcgorLlZ0IENGU2V0CithcmUgY3JlYXRlZCB3aXRoIG5vbi1wb2ludGVyLXNpemUgdmFsdWVzLgorLkl0IHNlY3VyaXR5LkZsb2F0TG9vcENvdW50ZXIKK1dhcm4gb24gdXNpbmcgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBhcyBhIGxvb3AgY291bnRlciAoQ0VSVDogRkxQMzAtQywgRkxQMzAtQ1BQKS4KKy5JdCBzZWN1cml0eS5pbnNlY3VyZUFQSS5VbmNoZWNrZWRSZXR1cm4KK1dhcm4gb24gdXNlcyBvZiBmdW5jdGlvbnMgd2hvc2UgcmV0dXJuIHZhbHVlcyBtdXN0IGJlIGFsd2F5cyBjaGVja2VkLgorLkl0IHNlY3VyaXR5Lmluc2VjdXJlQVBJLmdldHB3CitXYXJuIG9uIHVzZXMgb2YKKy5GbiBnZXRwdyAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkuZ2V0cworV2FybiBvbiB1c2VzIG9mCisuRm4gZ2V0cyAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkubWtzdGVtcAorV2FybiB3aGVuCisuRm4gbWtzdGVtcAoraXMgcGFzc2VkIGZld2VyIHRoYW4gNiBYJ3MgaW4gdGhlIGZvcm1hdCBzdHJpbmcuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkubWt0ZW1wCitXYXJuIG9uIHVzZXMgb2YKKy5GbiBta3RlbXAgLgorLkl0IHNlY3VyaXR5Lmluc2VjdXJlQVBJLnJhbmQKK1dhcm4gb24gdXNlcyBvZgorLkZuIHJhbmQgLAorLkZuIHJhbmRvbSAsCithbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkuc3RyY3B5CitXYXJuIG9uIHVzZXMgb2YKKy5GbiBzdHJjcHkKK2FuZAorLkZuIHN0cmNhdCAuCisuSXQgc2VjdXJpdHkuaW5zZWN1cmVBUEkudmZvcmsKK1dhcm4gb24gdXNlcyBvZgorLkZuIHZmb3JrIC4KKy5JdCB1bml4LkFQSQorQ2hlY2sgY2FsbHMgdG8gdmFyaW91cyBVTklYL1Bvc2l4IGZ1bmN0aW9ucy4KKy5JdCB1bml4Lk1hbGxvYworQ2hlY2sgZm9yIG1lbW9yeSBsZWFrcywgZG91YmxlIGZyZWUsIGFuZCB1c2UtYWZ0ZXItZnJlZS4KKy5JdCB1bml4LmNzdHJpbmcuQmFkU2l6ZUFyZworQ2hlY2sgdGhlIHNpemUgYXJndW1lbnQgcGFzc2VkIGludG8gQyBzdHJpbmcgZnVuY3Rpb25zIGZvciBjb21tb24KK2Vycm9uZW91cyBwYXR0ZXJucy4KKy5JdCB1bml4LmNzdHJpbmcuTnVsbEFyZworQ2hlY2sgZm9yIG51bGwgcG9pbnRlcnMgYmVpbmcgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBDIHN0cmluZyBmdW5jdGlvbnMuCisuRWwKKy5cIgorLlNoIEVYQU1QTEUKKy5JYyBzY2FuLWJ1aWxkIC1vIC90bXAvbXlodG1sZGlyIG1ha2UgLWo0CisuUHAKK1RoZSBhYm92ZSBleGFtcGxlIGNhdXNlcyBhbmFseXNpcyByZXBvcnRzIHRvIGJlIGRlcG9zaXRlZCBpbnRvCithIHN1YmRpcmVjdG9yeSBvZgorLlBhIC90bXAvbXlodG1sZGlyCithbmQgdG8gcnVuCisuSWMgbWFrZQord2l0aCB0aGUKKy5GbCBqNAorb3B0aW9uLgorQSBkaWZmZXJlbnQgc3ViZGlyZWN0b3J5IGlzIGNyZWF0ZWQgZWFjaCB0aW1lCisuTm0KK2FuYWx5emVzIGEgcHJvamVjdC4KK1RoZSBhbmFseXplciBzaG91bGQgc3VwcG9ydCBtb3N0IHBhcmFsbGVsIGJ1aWxkcywgYnV0IG5vdCBkaXN0cmlidXRlZCBidWlsZHMuCisuU2ggQVVUSE9SUworLk5tCit3YXMgd3JpdHRlbiBieQorLkFuICJUZWQgS3JlbWVuZWsiIC4KK0RvY3VtZW50YXRpb24gY29udHJpYnV0ZWQgYnkKKy5BbiAiSmFtZXMgSy4gTG93ZGVuIiBBcSBqa2xvd2RlbkBzY2hlbWFtYW5pYS5vcmcgLgpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLWJ1aWxkL3NoYXJlL3NjYW4tYnVpbGQvc2NhbnZpZXcuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmOGE1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zY2Fudmlldy5jc3MKQEAgLTAsMCArMSw2MiBAQAorYm9keSB7IGNvbG9yOiMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZiB9Citib2R5IHsgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjlwdCB9CitoMSB7IGZvbnQtc2l6ZTogMTRwdDsgfQoraDIgeyBmb250LXNpemU6IDEycHQ7IH0KK3RhYmxlIHsgZm9udC1zaXplOjlwdCB9Cit0YWJsZSB7IGJvcmRlci1zcGFjaW5nOiAwcHg7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIH0KK3RoLCB0YWJsZSB0aGVhZCB7CisgIGJhY2tncm91bmQtY29sb3I6I2VlZTsgY29sb3I6IzY2NjY2NjsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7IGN1cnNvcjogZGVmYXVsdDsKKyAgdGV4dC1hbGlnbjpjZW50ZXI7CisgIGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LWZhbWlseTogVmVyZGFuYTsKKyAgd2hpdGUtc3BhY2U6bm93cmFwOworfQorLlcgeyBmb250LXNpemU6MHB4IH0KK3RoLCB0ZCB7IHBhZGRpbmc6NXB4OyBwYWRkaW5nLWxlZnQ6OHB4OyB0ZXh0LWFsaWduOmxlZnQgfQordGQuU1VNTV9ERVNDIHsgcGFkZGluZy1sZWZ0OjEycHggfQordGQuREVTQyB7IHdoaXRlLXNwYWNlOnByZSB9Cit0ZC5RIHsgdGV4dC1hbGlnbjpyaWdodCB9Cit0ZCB7IHRleHQtYWxpZ246bGVmdCB9Cit0Ym9keS5zY3JvbGxDb250ZW50IHsgb3ZlcmZsb3c6YXV0byB9CisKK3RhYmxlLmZvcm1fZ3JvdXAgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK3RhYmxlLmZvcm1faW5uZXJfZ3JvdXAgeworICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAwcHg7Cit9CisKK3RhYmxlLmZvcm0geworICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTk7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKK3RkLmZvcm1fbGFiZWwgeworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisvKiBGb3Igb25lIGxpbmUgZW50aXJlcyAqLwordGQuZm9ybV9jbGFiZWwgeworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHZlcnRpY2FsLWFsaWduOiBjZW50ZXI7Cit9Cit0ZC5mb3JtX3ZhbHVlIHsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9Cit0ZC5mb3JtX3N1Ym1pdCB7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKworaDEuU3VibWl0RmFpbCB7CisgICAgY29sb3I6ICNmMDA7Cit9CitoMS5TdWJtaXRPayB7Cit9CmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tYnVpbGQvc2hhcmUvc2Nhbi1idWlsZC9zb3J0dGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmYWEwNwotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi1idWlsZC9zaGFyZS9zY2FuLWJ1aWxkL3NvcnR0YWJsZS5qcwpAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAgU29ydFRhYmxlCisgIHZlcnNpb24gMgorICA3dGggQXByaWwgMjAwNworICBTdHVhcnQgTGFuZ3JpZGdlLCBodHRwOi8vd3d3LmtyeW9nZW5peC5vcmcvY29kZS9icm93c2VyL3NvcnR0YWJsZS8KKworICBJbnN0cnVjdGlvbnM6CisgIERvd25sb2FkIHRoaXMgZmlsZQorICBBZGQgPHNjcmlwdCBzcmM9InNvcnR0YWJsZS5qcyI+PC9zY3JpcHQ+IHRvIHlvdXIgSFRNTAorICBBZGQgY2xhc3M9InNvcnRhYmxlIiB0byBhbnkgdGFibGUgeW91J2QgbGlrZSB0byBtYWtlIHNvcnRhYmxlCisgIENsaWNrIG9uIHRoZSBoZWFkZXJzIHRvIHNvcnQKKworICBUaGFua3MgdG8gbWFueSwgbWFueSBwZW9wbGUgZm9yIGNvbnRyaWJ1dGlvbnMgYW5kIHN1Z2dlc3Rpb25zLgorICBMaWNlbmNlZCBhcyBYMTE6IGh0dHA6Ly93d3cua3J5b2dlbml4Lm9yZy9jb2RlL2Jyb3dzZXIvbGljZW5jZS5odG1sCisgIFRoaXMgYmFzaWNhbGx5IG1lYW5zOiBkbyB3aGF0IHlvdSB3YW50IHdpdGggaXQuCisqLworCisKK3ZhciBzdElzSUUgPSAvKkBjY19vbiFAKi9mYWxzZTsKKworc29ydHRhYmxlID0geworICBpbml0OiBmdW5jdGlvbigpIHsKKyAgICAvLyBxdWl0IGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKKyAgICBpZiAoYXJndW1lbnRzLmNhbGxlZS5kb25lKSByZXR1cm47CisgICAgLy8gZmxhZyB0aGlzIGZ1bmN0aW9uIHNvIHdlIGRvbid0IGRvIHRoZSBzYW1lIHRoaW5nIHR3aWNlCisgICAgYXJndW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1ZTsKKyAgICAvLyBraWxsIHRoZSB0aW1lcgorICAgIGlmIChfdGltZXIpIGNsZWFySW50ZXJ2YWwoX3RpbWVyKTsKKworICAgIGlmICghZG9jdW1lbnQuY3JlYXRlRWxlbWVudCB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHJldHVybjsKKworICAgIHNvcnR0YWJsZS5EQVRFX1JFID0gL14oXGRcZD8pW1wvXC4tXShcZFxkPylbXC9cLi1dKChcZFxkKT9cZFxkKSQvOworCisgICAgZm9yRWFjaChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGFibGUnKSwgZnVuY3Rpb24odGFibGUpIHsKKyAgICAgIGlmICh0YWJsZS5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnRhYmxlXGIvKSAhPSAtMSkgeworICAgICAgICBzb3J0dGFibGUubWFrZVNvcnRhYmxlKHRhYmxlKTsKKyAgICAgIH0KKyAgICB9KTsKKworICB9LAorCisgIG1ha2VTb3J0YWJsZTogZnVuY3Rpb24odGFibGUpIHsKKyAgICBpZiAodGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoZWFkJykubGVuZ3RoID09IDApIHsKKyAgICAgIC8vIHRhYmxlIGRvZXNuJ3QgaGF2ZSBhIHRIZWFkLiBTaW5jZSBpdCBzaG91bGQgaGF2ZSwgY3JlYXRlIG9uZSBhbmQKKyAgICAgIC8vIHB1dCB0aGUgZmlyc3QgdGFibGUgcm93IGluIGl0LgorICAgICAgdGhlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGhlYWQnKTsKKyAgICAgIHRoZS5hcHBlbmRDaGlsZCh0YWJsZS5yb3dzWzBdKTsKKyAgICAgIHRhYmxlLmluc2VydEJlZm9yZSh0aGUsdGFibGUuZmlyc3RDaGlsZCk7CisgICAgfQorICAgIC8vIFNhZmFyaSBkb2Vzbid0IHN1cHBvcnQgdGFibGUudEhlYWQsIHNpZ2gKKyAgICBpZiAodGFibGUudEhlYWQgPT0gbnVsbCkgdGFibGUudEhlYWQgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGhlYWQnKVswXTsKKworICAgIGlmICh0YWJsZS50SGVhZC5yb3dzLmxlbmd0aCAhPSAxKSByZXR1cm47IC8vIGNhbid0IGNvcGUgd2l0aCB0d28gaGVhZGVyIHJvd3MKKworICAgIC8vIFNvcnR0YWJsZSB2MSBwdXQgcm93cyB3aXRoIGEgY2xhc3Mgb2YgInNvcnRib3R0b20iIGF0IHRoZSBib3R0b20gKGFzCisgICAgLy8gInRvdGFsIiByb3dzLCBmb3IgZXhhbXBsZSkuIFRoaXMgaXMgQiZSLCBzaW5jZSB3aGF0IHlvdSdyZSBzdXBwb3NlZAorICAgIC8vIHRvIGRvIGlzIHB1dCB0aGVtIGluIGEgdGZvb3QuIFNvLCBpZiB0aGVyZSBhcmUgc29ydGJvdHRvbSByb3dzLAorICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBtb3ZlIHRoZW0gdG8gdGZvb3QgKGNyZWF0aW5nIGl0IGlmIG5lZWRlZCkuCisgICAgc29ydGJvdHRvbXJvd3MgPSBbXTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGFibGUucm93cy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRhYmxlLnJvd3NbaV0uY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0Ym90dG9tXGIvKSAhPSAtMSkgeworICAgICAgICBzb3J0Ym90dG9tcm93c1tzb3J0Ym90dG9tcm93cy5sZW5ndGhdID0gdGFibGUucm93c1tpXTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKHNvcnRib3R0b21yb3dzKSB7CisgICAgICBpZiAodGFibGUudEZvb3QgPT0gbnVsbCkgeworICAgICAgICAvLyB0YWJsZSBkb2Vzbid0IGhhdmUgYSB0Zm9vdC4gQ3JlYXRlIG9uZS4KKyAgICAgICAgdGZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGZvb3QnKTsKKyAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGZvKTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFyIGk9MDsgaTxzb3J0Ym90dG9tcm93cy5sZW5ndGg7IGkrKykgeworICAgICAgICB0Zm8uYXBwZW5kQ2hpbGQoc29ydGJvdHRvbXJvd3NbaV0pOworICAgICAgfQorICAgICAgZGVsZXRlIHNvcnRib3R0b21yb3dzOworICAgIH0KKworICAgIC8vIHdvcmsgdGhyb3VnaCBlYWNoIGNvbHVtbiBhbmQgY2FsY3VsYXRlIGl0cyB0eXBlCisgICAgaGVhZHJvdyA9IHRhYmxlLnRIZWFkLnJvd3NbMF0uY2VsbHM7CisgICAgZm9yICh2YXIgaT0wOyBpPGhlYWRyb3cubGVuZ3RoOyBpKyspIHsKKyAgICAgIC8vIG1hbnVhbGx5IG92ZXJyaWRlIHRoZSB0eXBlIHdpdGggYSBzb3J0dGFibGVfdHlwZSBhdHRyaWJ1dGUKKyAgICAgIGlmICghaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlX25vc29ydFxiLykpIHsgLy8gc2tpcCB0aGlzIGNvbAorICAgICAgICBtdGNoID0gaGVhZHJvd1tpXS5jbGFzc05hbWUubWF0Y2goL1xic29ydHRhYmxlXyhbYS16MC05XSspXGIvKTsKKyAgICAgICAgaWYgKG10Y2gpIHsgb3ZlcnJpZGUgPSBtdGNoWzFdOyB9CisJICAgICAgaWYgKG10Y2ggJiYgdHlwZW9mIHNvcnR0YWJsZVsic29ydF8iK292ZXJyaWRlXSA9PSAnZnVuY3Rpb24nKSB7CisJICAgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24gPSBzb3J0dGFibGVbInNvcnRfIitvdmVycmlkZV07CisJICAgICAgfSBlbHNlIHsKKwkgICAgICAgIGhlYWRyb3dbaV0uc29ydHRhYmxlX3NvcnRmdW5jdGlvbiA9IHNvcnR0YWJsZS5ndWVzc1R5cGUodGFibGUsaSk7CisJICAgICAgfQorCSAgICAgIC8vIG1ha2UgaXQgY2xpY2thYmxlIHRvIHNvcnQKKwkgICAgICBoZWFkcm93W2ldLnNvcnR0YWJsZV9jb2x1bW5pbmRleCA9IGk7CisJICAgICAgaGVhZHJvd1tpXS5zb3J0dGFibGVfdGJvZHkgPSB0YWJsZS50Qm9kaWVzWzBdOworCSAgICAgIGRlYW5fYWRkRXZlbnQoaGVhZHJvd1tpXSwiY2xpY2siLCBmdW5jdGlvbihlKSB7CisKKyAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUuc2VhcmNoKC9cYnNvcnR0YWJsZV9zb3J0ZWRcYi8pICE9IC0xKSB7CisgICAgICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBieSB0aGlzIGNvbHVtbiwganVzdAorICAgICAgICAgICAgLy8gcmV2ZXJzZSB0aGUgdGFibGUsIHdoaWNoIGlzIHF1aWNrZXIKKyAgICAgICAgICAgIHNvcnR0YWJsZS5yZXZlcnNlKHRoaXMuc29ydHRhYmxlX3Rib2R5KTsKKyAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUucmVwbGFjZSgnc29ydHRhYmxlX3NvcnRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScpOworICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29ydHRhYmxlX3NvcnRmd2RpbmQnKSk7CisgICAgICAgICAgICBzb3J0cmV2aW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgICAgICAgICAgc29ydHJldmluZC5pZCA9ICJzb3J0dGFibGVfc29ydHJldmluZCI7CisgICAgICAgICAgICBzb3J0cmV2aW5kLmlubmVySFRNTCA9IHN0SXNJRSA/ICcmbmJzcDxmb250IGZhY2U9IndlYmRpbmdzIj41PC9mb250PicgOiAnJm5ic3A7JiN4MjVCNDsnOworICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChzb3J0cmV2aW5kKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lLnNlYXJjaCgvXGJzb3J0dGFibGVfc29ydGVkX3JldmVyc2VcYi8pICE9IC0xKSB7CisgICAgICAgICAgICAvLyBpZiB3ZSdyZSBhbHJlYWR5IHNvcnRlZCBieSB0aGlzIGNvbHVtbiBpbiByZXZlcnNlLCBqdXN0CisgICAgICAgICAgICAvLyByZS1yZXZlcnNlIHRoZSB0YWJsZSwgd2hpY2ggaXMgcXVpY2tlcgorICAgICAgICAgICAgc29ydHRhYmxlLnJldmVyc2UodGhpcy5zb3J0dGFibGVfdGJvZHkpOworICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZS5yZXBsYWNlKCdzb3J0dGFibGVfc29ydGVkX3JldmVyc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0dGFibGVfc29ydGVkJyk7CisgICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydHJldmluZCcpKTsKKyAgICAgICAgICAgIHNvcnRmd2RpbmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgICAgICAgICBzb3J0ZndkaW5kLmlkID0gInNvcnR0YWJsZV9zb3J0ZndkaW5kIjsKKyAgICAgICAgICAgIHNvcnRmd2RpbmQuaW5uZXJIVE1MID0gc3RJc0lFID8gJyZuYnNwPGZvbnQgZmFjZT0id2ViZGluZ3MiPjY8L2ZvbnQ+JyA6ICcmbmJzcDsmI3gyNUJFOyc7CisgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHNvcnRmd2RpbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIHJlbW92ZSBzb3J0dGFibGVfc29ydGVkIGNsYXNzZXMKKyAgICAgICAgICB0aGVhZHJvdyA9IHRoaXMucGFyZW50Tm9kZTsKKyAgICAgICAgICBmb3JFYWNoKHRoZWFkcm93LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGNlbGwpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLm5vZGVUeXBlID09IDEpIHsgLy8gYW4gZWxlbWVudAorICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWRfcmV2ZXJzZScsJycpOworICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9IGNlbGwuY2xhc3NOYW1lLnJlcGxhY2UoJ3NvcnR0YWJsZV9zb3J0ZWQnLCcnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnR0YWJsZV9zb3J0ZndkaW5kJyk7CisgICAgICAgICAgaWYgKHNvcnRmd2RpbmQpIHsgc29ydGZ3ZGluZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNvcnRmd2RpbmQpOyB9CisgICAgICAgICAgc29ydHJldmluZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3J0dGFibGVfc29ydHJldmluZCcpOworICAgICAgICAgIGlmIChzb3J0cmV2aW5kKSB7IHNvcnRyZXZpbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzb3J0cmV2aW5kKTsgfQorCisgICAgICAgICAgdGhpcy5jbGFzc05hbWUgKz0gJyBzb3J0dGFibGVfc29ydGVkJzsKKyAgICAgICAgICBzb3J0ZndkaW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOworICAgICAgICAgIHNvcnRmd2RpbmQuaWQgPSAic29ydHRhYmxlX3NvcnRmd2RpbmQiOworICAgICAgICAgIHNvcnRmd2RpbmQuaW5uZXJIVE1MID0gc3RJc0lFID8gJyZuYnNwPGZvbnQgZmFjZT0id2ViZGluZ3MiPjY8L2ZvbnQ+JyA6ICcmbmJzcDsmI3gyNUJFOyc7CisgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChzb3J0ZndkaW5kKTsKKworCSAgICAgICAgLy8gYnVpbGQgYW4gYXJyYXkgdG8gc29ydC4gVGhpcyBpcyBhIFNjaHdhcnR6aWFuIHRyYW5zZm9ybSB0aGluZywKKwkgICAgICAgIC8vIGkuZS4sIHdlICJkZWNvcmF0ZSIgZWFjaCByb3cgd2l0aCB0aGUgYWN0dWFsIHNvcnQga2V5LAorCSAgICAgICAgLy8gc29ydCBiYXNlZCBvbiB0aGUgc29ydCBrZXlzLCBhbmQgdGhlbiBwdXQgdGhlIHJvd3MgYmFjayBpbiBvcmRlcgorCSAgICAgICAgLy8gd2hpY2ggaXMgYSBsb3QgZmFzdGVyIGJlY2F1c2UgeW91IG9ubHkgZG8gZ2V0SW5uZXJUZXh0IG9uY2UgcGVyIHJvdworCSAgICAgICAgcm93X2FycmF5ID0gW107CisJICAgICAgICBjb2wgPSB0aGlzLnNvcnR0YWJsZV9jb2x1bW5pbmRleDsKKwkgICAgICAgIHJvd3MgPSB0aGlzLnNvcnR0YWJsZV90Ym9keS5yb3dzOworCSAgICAgICAgZm9yICh2YXIgaj0wOyBqPHJvd3MubGVuZ3RoOyBqKyspIHsKKwkgICAgICAgICAgcm93X2FycmF5W3Jvd19hcnJheS5sZW5ndGhdID0gW3NvcnR0YWJsZS5nZXRJbm5lclRleHQocm93c1tqXS5jZWxsc1tjb2xdKSwgcm93c1tqXV07CisJICAgICAgICB9CisJICAgICAgICAvKiBJZiB5b3Ugd2FudCBhIHN0YWJsZSBzb3J0LCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lICovCisJICAgICAgICBzb3J0dGFibGUuc2hha2VyX3NvcnQocm93X2FycmF5LCB0aGlzLnNvcnR0YWJsZV9zb3J0ZnVuY3Rpb24pOworCSAgICAgICAgLyogYW5kIGNvbW1lbnQgb3V0IHRoaXMgb25lICovCisJICAgICAgICAvL3Jvd19hcnJheS5zb3J0KHRoaXMuc29ydHRhYmxlX3NvcnRmdW5jdGlvbik7CisKKwkgICAgICAgIHRiID0gdGhpcy5zb3J0dGFibGVfdGJvZHk7CisJICAgICAgICBmb3IgKHZhciBqPTA7IGo8cm93X2FycmF5Lmxlbmd0aDsgaisrKSB7CisJICAgICAgICAgIHRiLmFwcGVuZENoaWxkKHJvd19hcnJheVtqXVsxXSk7CisJICAgICAgICB9CisKKwkgICAgICAgIGRlbGV0ZSByb3dfYXJyYXk7CisJICAgICAgfSk7CisJICAgIH0KKyAgICB9CisgIH0sCisKKyAgZ3Vlc3NUeXBlOiBmdW5jdGlvbih0YWJsZSwgY29sdW1uKSB7CisgICAgLy8gZ3Vlc3MgdGhlIHR5cGUgb2YgYSBjb2x1bW4gYmFzZWQgb24gaXRzIGZpcnN0IG5vbi1ibGFuayByb3cKKyAgICBzb3J0Zm4gPSBzb3J0dGFibGUuc29ydF9hbHBoYTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGFibGUudEJvZGllc1swXS5yb3dzLmxlbmd0aDsgaSsrKSB7CisgICAgICB0ZXh0ID0gc29ydHRhYmxlLmdldElubmVyVGV4dCh0YWJsZS50Qm9kaWVzWzBdLnJvd3NbaV0uY2VsbHNbY29sdW1uXSk7CisgICAgICBpZiAodGV4dCAhPSAnJykgeworICAgICAgICBpZiAodGV4dC5tYXRjaCgvXi0/W6MkpF0/W1xkLC5dKyU/JC8pKSB7CisgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X251bWVyaWM7CisgICAgICAgIH0KKyAgICAgICAgLy8gY2hlY2sgZm9yIGEgZGF0ZTogZGQvbW0veXl5eSBvciBkZC9tbS95eQorICAgICAgICAvLyBjYW4gaGF2ZSAvIG9yIC4gb3IgLSBhcyBzZXBhcmF0b3IKKyAgICAgICAgLy8gY2FuIGJlIG1tL2RkIGFzIHdlbGwKKyAgICAgICAgcG9zc2RhdGUgPSB0ZXh0Lm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKQorICAgICAgICBpZiAocG9zc2RhdGUpIHsKKyAgICAgICAgICAvLyBsb29rcyBsaWtlIGEgZGF0ZQorICAgICAgICAgIGZpcnN0ID0gcGFyc2VJbnQocG9zc2RhdGVbMV0pOworICAgICAgICAgIHNlY29uZCA9IHBhcnNlSW50KHBvc3NkYXRlWzJdKTsKKyAgICAgICAgICBpZiAoZmlyc3QgPiAxMikgeworICAgICAgICAgICAgLy8gZGVmaW5pdGVseSBkZC9tbQorICAgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X2RkbW07CisgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmQgPiAxMikgeworICAgICAgICAgICAgcmV0dXJuIHNvcnR0YWJsZS5zb3J0X21tZGQ7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGxvb2tzIGxpa2UgYSBkYXRlLCBidXQgd2UgY2FuJ3QgdGVsbCB3aGljaCwgc28gYXNzdW1lCisgICAgICAgICAgICAvLyB0aGF0IGl0J3MgZGQvbW0gKEVuZ2xpc2ggaW1wZXJpYWxpc20hKSBhbmQga2VlcCBsb29raW5nCisgICAgICAgICAgICBzb3J0Zm4gPSBzb3J0dGFibGUuc29ydF9kZG1tOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc29ydGZuOworICB9LAorCisgIGdldElubmVyVGV4dDogZnVuY3Rpb24obm9kZSkgeworICAgIC8vIGdldHMgdGhlIHRleHQgd2Ugd2FudCB0byB1c2UgZm9yIHNvcnRpbmcgZm9yIGEgY2VsbC4KKyAgICAvLyBzdHJpcHMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAvLyB0aGlzIGlzICpub3QqIGEgZ2VuZXJpYyBnZXRJbm5lclRleHQgZnVuY3Rpb247IGl0J3Mgc3BlY2lhbCB0byBzb3J0dGFibGUuCisgICAgLy8gZm9yIGV4YW1wbGUsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGNlbGwgdGV4dCB3aXRoIGEgY3VzdG9ta2V5IGF0dHJpYnV0ZS4KKyAgICAvLyBpdCBhbHNvIGdldHMgLnZhbHVlIGZvciA8aW5wdXQ+IGZpZWxkcy4KKworICAgIGhhc0lucHV0cyA9ICh0eXBlb2Ygbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9PSAnZnVuY3Rpb24nKSAmJgorICAgICAgICAgICAgICAgICBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpLmxlbmd0aDsKKworICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZSgic29ydHRhYmxlX2N1c3RvbWtleSIpICE9IG51bGwpIHsKKyAgICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZSgic29ydHRhYmxlX2N1c3RvbWtleSIpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZS50ZXh0Q29udGVudCAhPSAndW5kZWZpbmVkJyAmJiAhaGFzSW5wdXRzKSB7CisgICAgICByZXR1cm4gbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlb2Ygbm9kZS5pbm5lclRleHQgIT0gJ3VuZGVmaW5lZCcgJiYgIWhhc0lucHV0cykgeworICAgICAgcmV0dXJuIG5vZGUuaW5uZXJUZXh0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlLnRleHQgIT0gJ3VuZGVmaW5lZCcgJiYgIWhhc0lucHV0cykgeworICAgICAgcmV0dXJuIG5vZGUudGV4dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkgeworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnKSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS52YWx1ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgICAgICAgIH0KKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgIHJldHVybiBub2RlLm5vZGVWYWx1ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgdmFyIGlubmVyVGV4dCA9ICcnOworICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpbm5lclRleHQgKz0gc29ydHRhYmxlLmdldElubmVyVGV4dChub2RlLmNoaWxkTm9kZXNbaV0pOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gaW5uZXJUZXh0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuICcnOworICAgICAgfQorICAgIH0KKyAgfSwKKworICByZXZlcnNlOiBmdW5jdGlvbih0Ym9keSkgeworICAgIC8vIHJldmVyc2UgdGhlIHJvd3MgaW4gYSB0Ym9keQorICAgIG5ld3Jvd3MgPSBbXTsKKyAgICBmb3IgKHZhciBpPTA7IGk8dGJvZHkucm93cy5sZW5ndGg7IGkrKykgeworICAgICAgbmV3cm93c1tuZXdyb3dzLmxlbmd0aF0gPSB0Ym9keS5yb3dzW2ldOworICAgIH0KKyAgICBmb3IgKHZhciBpPW5ld3Jvd3MubGVuZ3RoLTE7IGk+PTA7IGktLSkgeworICAgICAgIHRib2R5LmFwcGVuZENoaWxkKG5ld3Jvd3NbaV0pOworICAgIH0KKyAgICBkZWxldGUgbmV3cm93czsKKyAgfSwKKworICAvKiBzb3J0IGZ1bmN0aW9ucworICAgICBlYWNoIHNvcnQgZnVuY3Rpb24gdGFrZXMgdHdvIHBhcmFtZXRlcnMsIGEgYW5kIGIKKyAgICAgeW91IGFyZSBjb21wYXJpbmcgYVswXSBhbmQgYlswXSAqLworICBzb3J0X251bWVyaWM6IGZ1bmN0aW9uKGEsYikgeworICAgIGFhID0gcGFyc2VGbG9hdChhWzBdLnJlcGxhY2UoL1teMC05Li1dL2csJycpKTsKKyAgICBpZiAoaXNOYU4oYWEpKSBhYSA9IDA7CisgICAgYmIgPSBwYXJzZUZsb2F0KGJbMF0ucmVwbGFjZSgvW14wLTkuLV0vZywnJykpOworICAgIGlmIChpc05hTihiYikpIGJiID0gMDsKKyAgICByZXR1cm4gYWEtYmI7CisgIH0sCisgIHNvcnRfYWxwaGE6IGZ1bmN0aW9uKGEsYikgeworICAgIGlmIChhWzBdPT1iWzBdKSByZXR1cm4gMDsKKyAgICBpZiAoYVswXTxiWzBdKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisgIHNvcnRfZGRtbTogZnVuY3Rpb24oYSxiKSB7CisgICAgbXRjaCA9IGFbMF0ubWF0Y2goc29ydHRhYmxlLkRBVEVfUkUpOworICAgIHkgPSBtdGNoWzNdOyBtID0gbXRjaFsyXTsgZCA9IG10Y2hbMV07CisgICAgaWYgKG0ubGVuZ3RoID09IDEpIG0gPSAnMCcrbTsKKyAgICBpZiAoZC5sZW5ndGggPT0gMSkgZCA9ICcwJytkOworICAgIGR0MSA9IHkrbStkOworICAgIG10Y2ggPSBiWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKKyAgICB5ID0gbXRjaFszXTsgbSA9IG10Y2hbMl07IGQgPSBtdGNoWzFdOworICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207CisgICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKKyAgICBkdDIgPSB5K20rZDsKKyAgICBpZiAoZHQxPT1kdDIpIHJldHVybiAwOworICAgIGlmIChkdDE8ZHQyKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisgIHNvcnRfbW1kZDogZnVuY3Rpb24oYSxiKSB7CisgICAgbXRjaCA9IGFbMF0ubWF0Y2goc29ydHRhYmxlLkRBVEVfUkUpOworICAgIHkgPSBtdGNoWzNdOyBkID0gbXRjaFsyXTsgbSA9IG10Y2hbMV07CisgICAgaWYgKG0ubGVuZ3RoID09IDEpIG0gPSAnMCcrbTsKKyAgICBpZiAoZC5sZW5ndGggPT0gMSkgZCA9ICcwJytkOworICAgIGR0MSA9IHkrbStkOworICAgIG10Y2ggPSBiWzBdLm1hdGNoKHNvcnR0YWJsZS5EQVRFX1JFKTsKKyAgICB5ID0gbXRjaFszXTsgZCA9IG10Y2hbMl07IG0gPSBtdGNoWzFdOworICAgIGlmIChtLmxlbmd0aCA9PSAxKSBtID0gJzAnK207CisgICAgaWYgKGQubGVuZ3RoID09IDEpIGQgPSAnMCcrZDsKKyAgICBkdDIgPSB5K20rZDsKKyAgICBpZiAoZHQxPT1kdDIpIHJldHVybiAwOworICAgIGlmIChkdDE8ZHQyKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIDE7CisgIH0sCisKKyAgc2hha2VyX3NvcnQ6IGZ1bmN0aW9uKGxpc3QsIGNvbXBfZnVuYykgeworICAgIC8vIEEgc3RhYmxlIHNvcnQgZnVuY3Rpb24gdG8gYWxsb3cgbXVsdGktbGV2ZWwgc29ydGluZyBvZiBkYXRhCisgICAgLy8gc2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvY2t0YWlsX3NvcnQKKyAgICAvLyB0aGFua3MgdG8gSm9zZXBoIE5haG1pYXMKKyAgICB2YXIgYiA9IDA7CisgICAgdmFyIHQgPSBsaXN0Lmxlbmd0aCAtIDE7CisgICAgdmFyIHN3YXAgPSB0cnVlOworCisgICAgd2hpbGUoc3dhcCkgeworICAgICAgICBzd2FwID0gZmFsc2U7CisgICAgICAgIGZvcih2YXIgaSA9IGI7IGkgPCB0OyArK2kpIHsKKyAgICAgICAgICAgIGlmICggY29tcF9mdW5jKGxpc3RbaV0sIGxpc3RbaSsxXSkgPiAwICkgeworICAgICAgICAgICAgICAgIHZhciBxID0gbGlzdFtpXTsgbGlzdFtpXSA9IGxpc3RbaSsxXTsgbGlzdFtpKzFdID0gcTsKKyAgICAgICAgICAgICAgICBzd2FwID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAvLyBmb3IKKyAgICAgICAgdC0tOworCisgICAgICAgIGlmICghc3dhcCkgYnJlYWs7CisKKyAgICAgICAgZm9yKHZhciBpID0gdDsgaSA+IGI7IC0taSkgeworICAgICAgICAgICAgaWYgKCBjb21wX2Z1bmMobGlzdFtpXSwgbGlzdFtpLTFdKSA8IDAgKSB7CisgICAgICAgICAgICAgICAgdmFyIHEgPSBsaXN0W2ldOyBsaXN0W2ldID0gbGlzdFtpLTFdOyBsaXN0W2ktMV0gPSBxOworICAgICAgICAgICAgICAgIHN3YXAgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IC8vIGZvcgorICAgICAgICBiKys7CisKKyAgICB9IC8vIHdoaWxlKHN3YXApCisgIH0KK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBTdXBwb3J0aW5nIGZ1bmN0aW9uczogYnVuZGxlZCBoZXJlIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBhIGxpYnJhcnkKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvLyBEZWFuIEVkd2FyZHMvTWF0dGhpYXMgTWlsbGVyL0pvaG4gUmVzaWcKKworLyogZm9yIE1vemlsbGEvT3BlcmE5ICovCitpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeworICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBzb3J0dGFibGUuaW5pdCwgZmFsc2UpOworfQorCisvKiBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgKi8KKy8qQGNjX29uIEAqLworLypAaWYgKEBfd2luMzIpCisgICAgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgaWQ9X19pZV9vbmxvYWQgZGVmZXIgc3JjPWphdmFzY3JpcHQ6dm9pZCgwKT48XC9zY3JpcHQ+Iik7CisgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX2llX29ubG9hZCIpOworICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSB7CisgICAgICAgICAgICBzb3J0dGFibGUuaW5pdCgpOyAvLyBjYWxsIHRoZSBvbmxvYWQgaGFuZGxlcgorICAgICAgICB9CisgICAgfTsKKy8qQGVuZCBAKi8KKworLyogZm9yIFNhZmFyaSAqLworaWYgKC9XZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7IC8vIHNuaWZmCisgICAgdmFyIF90aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoL2xvYWRlZHxjb21wbGV0ZS8udGVzdChkb2N1bWVudC5yZWFkeVN0YXRlKSkgeworICAgICAgICAgICAgc29ydHRhYmxlLmluaXQoKTsgLy8gY2FsbCB0aGUgb25sb2FkIGhhbmRsZXIKKyAgICAgICAgfQorICAgIH0sIDEwKTsKK30KKworLyogZm9yIG90aGVyIGJyb3dzZXJzICovCit3aW5kb3cub25sb2FkID0gc29ydHRhYmxlLmluaXQ7CisKKy8vIHdyaXR0ZW4gYnkgRGVhbiBFZHdhcmRzLCAyMDA1CisvLyB3aXRoIGlucHV0IGZyb20gVGlubyBaaWpkZWwsIE1hdHRoaWFzIE1pbGxlciwgRGllZ28gUGVyaW5pCisKKy8vIGh0dHA6Ly9kZWFuLmVkd2FyZHMubmFtZS93ZWJsb2cvMjAwNS8xMC9hZGQtZXZlbnQvCisKK2Z1bmN0aW9uIGRlYW5fYWRkRXZlbnQoZWxlbWVudCwgdHlwZSwgaGFuZGxlcikgeworCWlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKKwkJZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTsKKwl9IGVsc2UgeworCQkvLyBhc3NpZ24gZWFjaCBldmVudCBoYW5kbGVyIGEgdW5pcXVlIElECisJCWlmICghaGFuZGxlci4kJGd1aWQpIGhhbmRsZXIuJCRndWlkID0gZGVhbl9hZGRFdmVudC5ndWlkKys7CisJCS8vIGNyZWF0ZSBhIGhhc2ggdGFibGUgb2YgZXZlbnQgdHlwZXMgZm9yIHRoZSBlbGVtZW50CisJCWlmICghZWxlbWVudC5ldmVudHMpIGVsZW1lbnQuZXZlbnRzID0ge307CisJCS8vIGNyZWF0ZSBhIGhhc2ggdGFibGUgb2YgZXZlbnQgaGFuZGxlcnMgZm9yIGVhY2ggZWxlbWVudC9ldmVudCBwYWlyCisJCXZhciBoYW5kbGVycyA9IGVsZW1lbnQuZXZlbnRzW3R5cGVdOworCQlpZiAoIWhhbmRsZXJzKSB7CisJCQloYW5kbGVycyA9IGVsZW1lbnQuZXZlbnRzW3R5cGVdID0ge307CisJCQkvLyBzdG9yZSB0aGUgZXhpc3RpbmcgZXZlbnQgaGFuZGxlciAoaWYgdGhlcmUgaXMgb25lKQorCQkJaWYgKGVsZW1lbnRbIm9uIiArIHR5cGVdKSB7CisJCQkJaGFuZGxlcnNbMF0gPSBlbGVtZW50WyJvbiIgKyB0eXBlXTsKKwkJCX0KKwkJfQorCQkvLyBzdG9yZSB0aGUgZXZlbnQgaGFuZGxlciBpbiB0aGUgaGFzaCB0YWJsZQorCQloYW5kbGVyc1toYW5kbGVyLiQkZ3VpZF0gPSBoYW5kbGVyOworCQkvLyBhc3NpZ24gYSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byBkbyBhbGwgdGhlIHdvcmsKKwkJZWxlbWVudFsib24iICsgdHlwZV0gPSBoYW5kbGVFdmVudDsKKwl9Cit9OworLy8gYSBjb3VudGVyIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZSBJRHMKK2RlYW5fYWRkRXZlbnQuZ3VpZCA9IDE7CisKK2Z1bmN0aW9uIHJlbW92ZUV2ZW50KGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpIHsKKwlpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7CisJCWVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7CisJfSBlbHNlIHsKKwkJLy8gZGVsZXRlIHRoZSBldmVudCBoYW5kbGVyIGZyb20gdGhlIGhhc2ggdGFibGUKKwkJaWYgKGVsZW1lbnQuZXZlbnRzICYmIGVsZW1lbnQuZXZlbnRzW3R5cGVdKSB7CisJCQlkZWxldGUgZWxlbWVudC5ldmVudHNbdHlwZV1baGFuZGxlci4kJGd1aWRdOworCQl9CisJfQorfTsKKworZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHsKKwl2YXIgcmV0dXJuVmFsdWUgPSB0cnVlOworCS8vIGdyYWIgdGhlIGV2ZW50IG9iamVjdCAoSUUgdXNlcyBhIGdsb2JhbCBldmVudCBvYmplY3QpCisJZXZlbnQgPSBldmVudCB8fCBmaXhFdmVudCgoKHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMpLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cpLmV2ZW50KTsKKwkvLyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGhhc2ggdGFibGUgb2YgZXZlbnQgaGFuZGxlcnMKKwl2YXIgaGFuZGxlcnMgPSB0aGlzLmV2ZW50c1tldmVudC50eXBlXTsKKwkvLyBleGVjdXRlIGVhY2ggZXZlbnQgaGFuZGxlcgorCWZvciAodmFyIGkgaW4gaGFuZGxlcnMpIHsKKwkJdGhpcy4kJGhhbmRsZUV2ZW50ID0gaGFuZGxlcnNbaV07CisJCWlmICh0aGlzLiQkaGFuZGxlRXZlbnQoZXZlbnQpID09PSBmYWxzZSkgeworCQkJcmV0dXJuVmFsdWUgPSBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dXJuVmFsdWU7Cit9OworCitmdW5jdGlvbiBmaXhFdmVudChldmVudCkgeworCS8vIGFkZCBXM0Mgc3RhbmRhcmQgZXZlbnQgbWV0aG9kcworCWV2ZW50LnByZXZlbnREZWZhdWx0ID0gZml4RXZlbnQucHJldmVudERlZmF1bHQ7CisJZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gZml4RXZlbnQuc3RvcFByb3BhZ2F0aW9uOworCXJldHVybiBldmVudDsKK307CitmaXhFdmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeworCXRoaXMucmV0dXJuVmFsdWUgPSBmYWxzZTsKK307CitmaXhFdmVudC5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlOworfQorCisvLyBEZWFuJ3MgZm9yRWFjaDogaHR0cDovL2RlYW4uZWR3YXJkcy5uYW1lL2Jhc2UvZm9yRWFjaC5qcworLyoKKwlmb3JFYWNoLCB2ZXJzaW9uIDEuMAorCUNvcHlyaWdodCAyMDA2LCBEZWFuIEVkd2FyZHMKKwlMaWNlbnNlOiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAorKi8KKworLy8gYXJyYXktbGlrZSBlbnVtZXJhdGlvbgoraWYgKCFBcnJheS5mb3JFYWNoKSB7IC8vIG1vemlsbGEgYWxyZWFkeSBzdXBwb3J0cyB0aGlzCisJQXJyYXkuZm9yRWFjaCA9IGZ1bmN0aW9uKGFycmF5LCBibG9jaywgY29udGV4dCkgeworCQlmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisJCQlibG9jay5jYWxsKGNvbnRleHQsIGFycmF5W2ldLCBpLCBhcnJheSk7CisJCX0KKwl9OworfQorCisvLyBnZW5lcmljIGVudW1lcmF0aW9uCitGdW5jdGlvbi5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYmxvY2ssIGNvbnRleHQpIHsKKwlmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7CisJCWlmICh0eXBlb2YgdGhpcy5wcm90b3R5cGVba2V5XSA9PSAidW5kZWZpbmVkIikgeworCQkJYmxvY2suY2FsbChjb250ZXh0LCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpOworCQl9CisJfQorfTsKKworLy8gY2hhcmFjdGVyIGVudW1lcmF0aW9uCitTdHJpbmcuZm9yRWFjaCA9IGZ1bmN0aW9uKHN0cmluZywgYmxvY2ssIGNvbnRleHQpIHsKKwlBcnJheS5mb3JFYWNoKHN0cmluZy5zcGxpdCgiIiksIGZ1bmN0aW9uKGNociwgaW5kZXgpIHsKKwkJYmxvY2suY2FsbChjb250ZXh0LCBjaHIsIGluZGV4LCBzdHJpbmcpOworCX0pOworfTsKKworLy8gZ2xvYmFsbHkgcmVzb2x2ZSBmb3JFYWNoIGVudW1lcmF0aW9uCit2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uKG9iamVjdCwgYmxvY2ssIGNvbnRleHQpIHsKKwlpZiAob2JqZWN0KSB7CisJCXZhciByZXNvbHZlID0gT2JqZWN0OyAvLyBkZWZhdWx0CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBGdW5jdGlvbikgeworCQkJLy8gZnVuY3Rpb25zIGhhdmUgYSAibGVuZ3RoIiBwcm9wZXJ0eQorCQkJcmVzb2x2ZSA9IEZ1bmN0aW9uOworCQl9IGVsc2UgaWYgKG9iamVjdC5mb3JFYWNoIGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKKwkJCS8vIHRoZSBvYmplY3QgaW1wbGVtZW50cyBhIGN1c3RvbSBmb3JFYWNoIG1ldGhvZCBzbyB1c2UgdGhhdAorCQkJb2JqZWN0LmZvckVhY2goYmxvY2ssIGNvbnRleHQpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT0gInN0cmluZyIpIHsKKwkJCS8vIHRoZSBvYmplY3QgaXMgYSBzdHJpbmcKKwkJCXJlc29sdmUgPSBTdHJpbmc7CisJCX0gZWxzZSBpZiAodHlwZW9mIG9iamVjdC5sZW5ndGggPT0gIm51bWJlciIpIHsKKwkJCS8vIHRoZSBvYmplY3QgaXMgYXJyYXktbGlrZQorCQkJcmVzb2x2ZSA9IEFycmF5OworCQl9CisJCXJlc29sdmUuZm9yRWFjaChvYmplY3QsIGJsb2NrLCBjb250ZXh0KTsKKwl9Cit9OwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLXZpZXcvQ01ha2VMaXN0cy50eHQgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tdmlldy9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzA1Y2E1Ci0tLSAvZGV2L251bGwKKysrIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLXZpZXcvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSw0MSBAQAorb3B0aW9uKENMQU5HX0lOU1RBTExfU0NBTlZJRVcgIkluc3RhbGwgdGhlIHNjYW4tdmlldyB0b29sIiBPTikKKworc2V0KEJpbkZpbGVzCisgICAgICBzY2FuLXZpZXcpCisKK3NldChTaGFyZUZpbGVzCisgICAgICBTY2FuVmlldy5weQorICAgICAgUmVwb3J0ZXIucHkKKyAgICAgIHN0YXJ0ZmlsZS5weQorICAgICAgRmlsZVJhZGFyLnNjcHQKKyAgICAgIEdldFJhZGFyVmVyc2lvbi5zY3B0CisgICAgICBidWdjYXRjaGVyLmljbykKKworaWYoQ0xBTkdfSU5TVEFMTF9TQ0FOVklFVykKKyAgZm9yZWFjaChCaW5GaWxlICR7QmluRmlsZXN9KQorICAgIGFkZF9jdXN0b21fY29tbWFuZChPVVRQVVQgJHtDTUFLRV9CSU5BUllfRElSfS9iaW4vJHtCaW5GaWxlfQorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgbWFrZV9kaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9L2JpbgorICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgY29weQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9iaW4vJHtCaW5GaWxlfQorICAgICAgICAgICAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vYmluLworICAgICAgICAgICAgICAgICAgICAgICBERVBFTkRTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9iaW4vJHtCaW5GaWxlfSkKKyAgICBsaXN0KEFQUEVORCBEZXBlbmRzICR7Q01BS0VfQklOQVJZX0RJUn0vYmluLyR7QmluRmlsZX0pCisgICAgaW5zdGFsbChQUk9HUkFNUyBiaW4vJHtCaW5GaWxlfSBERVNUSU5BVElPTiBiaW4pCisgIGVuZGZvcmVhY2goKQorCisgIGZvcmVhY2goU2hhcmVGaWxlICR7U2hhcmVGaWxlc30pCisgICAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke0NNQUtFX0JJTkFSWV9ESVJ9L3NoYXJlL3NjYW4tdmlldy8ke1NoYXJlRmlsZX0KKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIG1ha2VfZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLXZpZXcKKyAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2hhcmUvJHtTaGFyZUZpbGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9zaGFyZS9zY2FuLXZpZXcvCisgICAgICAgICAgICAgICAgICAgICAgIERFUEVORFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3NoYXJlLyR7U2hhcmVGaWxlfSkKKyAgICBsaXN0KEFQUEVORCBEZXBlbmRzICR7Q01BS0VfQklOQVJZX0RJUn0vc2hhcmUvc2Nhbi12aWV3LyR7U2hhcmVGaWxlfSkKKyAgICBpbnN0YWxsKEZJTEVTIHNoYXJlLyR7U2hhcmVGaWxlfSBERVNUSU5BVElPTiBzaGFyZS9zY2FuLXZpZXcpCisgIGVuZGZvcmVhY2goKQorCisgIGFkZF9jdXN0b21fdGFyZ2V0KHNjYW4tdmlldyBBTEwgREVQRU5EUyAke0RlcGVuZHN9KQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoc2Nhbi12aWV3IFBST1BFUlRJRVMgRk9MREVSICJNaXNjIikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L01ha2VmaWxlIGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLXZpZXcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlNDQwNAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L01ha2VmaWxlCkBAIC0wLDAgKzEsMzcgQEAKKyMjPT09LSB0b29scy9zY2FuLXZpZXcvTWFrZWZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotIE1ha2VmaWxlIC0qLT09PSMjCisjIAorIyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3RydWN0dXJlCisjCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorIyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisjIAorIyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IyMKKworQ0xBTkdfTEVWRUwgOj0gLi4vLi4KKworaW5jbHVkZSAkKENMQU5HX0xFVkVMKS8uLi8uLi9NYWtlZmlsZS5jb25maWcKK2luY2x1ZGUgJChDTEFOR19MRVZFTCkvTWFrZWZpbGUKKworQ0xBTkdfSU5TVEFMTF9TQ0FOVklFVyA/PSAxCisKK2lmZXEgKCQoQ0xBTkdfSU5TVEFMTF9TQ0FOVklFVyksIDEpCisgIEluc3RhbGxUYXJnZXRzIDo9ICQoVG9vbERpcikvc2Nhbi12aWV3IFwKKyAgICAgICAgICAgICAgICAgICAgJChTaGFyZURpcikvc2Nhbi12aWV3L1JlcG9ydGVyLnB5IFwKKyAgICAgICAgICAgICAgICAgICAgJChTaGFyZURpcikvc2Nhbi12aWV3L1NjYW5WaWV3LnB5IFwKKyAgICAgICAgICAgICAgICAgICAgJChTaGFyZURpcikvc2Nhbi12aWV3L3N0YXJ0ZmlsZS5weSBcCisgICAgICAgICAgICAgICAgICAgICQoU2hhcmVEaXIpL3NjYW4tdmlldy9GaWxlUmFkYXIuc2NwdCBcCisgICAgICAgICAgICAgICAgICAgICQoU2hhcmVEaXIpL3NjYW4tdmlldy9HZXRSYWRhclZlcnNpb24uc2NwdCBcCisgICAgICAgICAgICAgICAgICAgICQoU2hhcmVEaXIpL3NjYW4tdmlldy9idWdjYXRjaGVyLmljbworZW5kaWYKKworYWxsOjogJChJbnN0YWxsVGFyZ2V0cykKKworJChUb29sRGlyKS8lOiBiaW4vJSBNYWtlZmlsZSAkKFRvb2xEaXIpLy5kaXIKKwkkKEVjaG8pICJDb3B5aW5nICQobm90ZGlyICQ8KSB0byB0aGUgJ2JpbicgZGlyZWN0b3J5Li4uIgorCSQoVmVyYiljcCAkPCAkQAorCSQoVmVyYiljaG1vZCAreCAkQAorCiskKFNoYXJlRGlyKS9zY2FuLXZpZXcvJTogc2hhcmUvJSBNYWtlZmlsZSAkKFNoYXJlRGlyKS9zY2FuLXZpZXcvLmRpcgorCSQoRWNobykgIkNvcHlpbmcgJChub3RkaXIgJDwpIHRvIHRoZSAnc2hhcmUnIGRpcmVjdG9yeS4uLiIKKwkkKFZlcmIpY3AgJDwgJEAKKwpkaWZmIC0tZ2l0IGEvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLXZpZXcvYmluL3NjYW4tdmlldyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L2Jpbi9zY2FuLXZpZXcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWI2ZThiYQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L2Jpbi9zY2FuLXZpZXcKQEAgLTAsMCArMSwxNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiJUaGUgY2xhbmcgc3RhdGljIGFuYWx5emVyIHJlc3VsdHMgdmlld2VyLgorIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBpbXAKK2ltcG9ydCBvcworaW1wb3J0IHBvc2l4cGF0aAoraW1wb3J0IHRocmVhZAoraW1wb3J0IHRpbWUKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCB3ZWJicm93c2VyCisKKyMgSG93IGxvbmcgdG8gd2FpdCBmb3Igc2VydmVyIHRvIHN0YXJ0Lgora1NsZWVwVGltZW91dCA9IC4wNQora01heFNsZWVwcyA9IGludCg2MCAvIGtTbGVlcFRpbWVvdXQpCisKKyMgRGVmYXVsdCBzZXJ2ZXIgcGFyYW1ldGVycworCitrRGVmYXVsdEhvc3QgPSAnMTI3LjAuMC4xJwora0RlZmF1bHRQb3J0ID0gODE4MQora01heFBvcnRzVG9UcnkgPSAxMDAKKworIyMjCisKKworZGVmIHVybF9pc191cCh1cmwpOgorICAgIHRyeToKKyAgICAgICAgbyA9IHVybGxpYi51cmxvcGVuKHVybCkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgby5jbG9zZSgpCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgc3RhcnRfYnJvd3Nlcihwb3J0LCBvcHRpb25zKToKKyAgICBpbXBvcnQgdXJsbGliCisgICAgaW1wb3J0IHdlYmJyb3dzZXIKKworICAgIHVybCA9ICdodHRwOi8vJXM6JWQnICUgKG9wdGlvbnMuaG9zdCwgcG9ydCkKKworICAgICMgV2FpdCBmb3Igc2VydmVyIHRvIHN0YXJ0Li4uCisgICAgaWYgb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6IFdhaXRpbmcgZm9yIHNlcnZlci4nICUgc3lzLmFyZ3ZbMF0pCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgIGZvciBpIGluIHJhbmdlKGtNYXhTbGVlcHMpOgorICAgICAgICBpZiB1cmxfaXNfdXAodXJsKToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcuJykKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICB0aW1lLnNsZWVwKGtTbGVlcFRpbWVvdXQpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJ1dBUk5JTkc6IFVuYWJsZSB0byBkZXRlY3QgdGhhdCBzZXJ2ZXIgc3RhcnRlZC4nCisKKyAgICBpZiBvcHRpb25zLmRlYnVnOgorICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAnJXM6IFN0YXJ0aW5nIHdlYmJyb3dzZXIuLi4nICUgc3lzLmFyZ3ZbMF0KKyAgICB3ZWJicm93c2VyLm9wZW4odXJsKQorCisKK2RlZiBydW4ocG9ydCwgb3B0aW9ucywgcm9vdCk6CisgICAgIyBQcmVmZXIgdG8gbG9vayByZWxhdGl2ZSB0byB0aGUgaW5zdGFsbGVkIGJpbmFyeQorICAgIHNoYXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArICIvLi4vc2hhcmUvc2Nhbi12aWV3IgorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNoYXJlKToKKyAgICAgICAgIyBPdGhlcndpc2UgbG9vayByZWxhdGl2ZSB0byB0aGUgc291cmNlCisgICAgICAgIHNoYXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSArICIvLi4vLi4vc2Nhbi12aWV3L3NoYXJlIgorICAgIHN5cy5wYXRoLmFwcGVuZChzaGFyZSkKKworICAgIGltcG9ydCBTY2FuVmlldworICAgIHRyeToKKyAgICAgICAgcHJpbnQgJ1N0YXJ0aW5nIHNjYW4tdmlldyBhdDogaHR0cDovLyVzOiVkJyAlIChvcHRpb25zLmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCkKKyAgICAgICAgcHJpbnQgJyAgVXNlIEN0cmwtQyB0byBleGl0LicKKyAgICAgICAgaHR0cGQgPSBTY2FuVmlldy5jcmVhdGVfc2VydmVyKChvcHRpb25zLmhvc3QsIHBvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywgcm9vdCkKKyAgICAgICAgaHR0cGQuc2VydmVfZm9yZXZlcigpCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBwYXNzCisKKworZGVmIHBvcnRfaXNfb3Blbihwb3J0KToKKyAgICBpbXBvcnQgU29ja2V0U2VydmVyCisgICAgdHJ5OgorICAgICAgICB0ID0gU29ja2V0U2VydmVyLlRDUFNlcnZlcigoa0RlZmF1bHRIb3N0LCBwb3J0KSwgTm9uZSkKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHQuc2VydmVyX2Nsb3NlKCkKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IlRoZSBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIHZpZXdlci4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoInJvb3QiLCBtZXRhdmFyPSI8cmVzdWx0cyBkaXJlY3Rvcnk+IiwgdHlwZT1zdHIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0taG9zdCcsIGRlc3Q9Imhvc3QiLCBkZWZhdWx0PWtEZWZhdWx0SG9zdCwgdHlwZT1zdHIsCisgICAgICAgIGhlbHA9Ikhvc3QgaW50ZXJmYWNlIHRvIGxpc3RlbiBvbi4gKGRlZmF1bHQ9JXMpIiAlIGtEZWZhdWx0SG9zdCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBvcnQnLCBkZXN0PSJwb3J0IiwgZGVmYXVsdD1Ob25lLCB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBvcnQgdG8gbGlzdGVuIG9uLiAoZGVmYXVsdD0lcykiICUga0RlZmF1bHRQb3J0KQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZGVidWciLCBkZXN0PSJkZWJ1ZyIsIGRlZmF1bHQ9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY291bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iUHJpbnQgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWF1dG8tcmVsb2FkIiwgZGVzdD0iYXV0b1JlbG9hZCIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iQXV0b21hdGljYWxseSB1cGRhdGUgbW9kdWxlIGZvciBlYWNoIHJlcXVlc3QuIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLW5vLWJyb3dzZXIiLCBkZXN0PSJzdGFydEJyb3dzZXIiLCBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRvbid0IG9wZW4gYSB3ZWJicm93c2VyIG9uIHN0YXJ0dXAuIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWFsbG93LWFsbC1ob3N0cyIsIGRlc3Q9Im9ubHlTZXJ2ZUxvY2FsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBbGxvdyBjb25uZWN0aW9ucyBmcm9tIGFueSBob3N0IChhY2Nlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzdHJpY3RlZCB0byAiMTI3LjAuMC4xIiBieSBkZWZhdWx0KScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgICMgTWFrZSBzdXJlIHRoaXMgZGlyZWN0b3J5IGlzIGluIGEgcmVhc29uYWJsZSBzdGF0ZSB0byB2aWV3LgorICAgIGlmIG5vdCBwb3NpeHBhdGguZXhpc3RzKHBvc2l4cGF0aC5qb2luKGFyZ3Mucm9vdCwgJ2luZGV4Lmh0bWwnKSk6CisgICAgICAgIHBhcnNlci5lcnJvcignSW52YWxpZCBkaXJlY3RvcnksIGFuYWx5c2lzIHJlc3VsdHMgbm90IGZvdW5kIScpCisKKyAgICAjIEZpbmQgYW4gb3BlbiBwb3J0LiBXZSBhcmVuJ3QgcGFydGljdWxhcmx5IHdvcnJpZWQgYWJvdXQgcmFjZQorICAgICMgY29uZGl0aW9ucyBoZXJlLiBOb3RlIHRoYXQgaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgcG9ydCB3ZSBvbmx5CisgICAgIyB1c2UgdGhhdCBvbmUuCisgICAgaWYgYXJncy5wb3J0IGlzIG5vdCBOb25lOgorICAgICAgICBwb3J0ID0gYXJncy5wb3J0CisgICAgZWxzZToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoa01heFBvcnRzVG9UcnkpOgorICAgICAgICAgICAgaWYgcG9ydF9pc19vcGVuKGtEZWZhdWx0UG9ydCArIGkpOgorICAgICAgICAgICAgICAgIHBvcnQgPSBrRGVmYXVsdFBvcnQgKyBpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5lcnJvcignVW5hYmxlIHRvIGZpbmQgdXNhYmxlIHBvcnQgaW4gWyVkLCVkKScgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChrRGVmYXVsdFBvcnQsIGtEZWZhdWx0UG9ydCtrTWF4UG9ydHNUb1RyeSkpCisKKyAgICAjIEtpY2sgb2ZmIHRocmVhZCB0byB3YWl0IGZvciBzZXJ2ZXIgYW5kIHN0YXJ0IHdlYiBicm93c2VyLCBpZgorICAgICMgcmVxdWVzdGVkLgorICAgIGlmIGFyZ3Muc3RhcnRCcm93c2VyOgorICAgICAgICB0ID0gdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoc3RhcnRfYnJvd3NlciwgKHBvcnQsIGFyZ3MpKQorCisgICAgcnVuKHBvcnQsIGFyZ3MsIGFyZ3Mucm9vdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0ZpbGVSYWRhci5zY3B0IGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLXZpZXcvc2hhcmUvRmlsZVJhZGFyLnNjcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3NDU1MgotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0ZpbGVSYWRhci5zY3B0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0dldFJhZGFyVmVyc2lvbi5zY3B0IGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLXZpZXcvc2hhcmUvR2V0UmFkYXJWZXJzaW9uLnNjcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL0dldFJhZGFyVmVyc2lvbi5zY3B0CmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9SZXBvcnRlci5weSBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1JlcG9ydGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGUwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9SZXBvcnRlci5weQpAQCAtMCwwICsxLDI0OCBAQAorIiIiTWV0aG9kcyBmb3IgcmVwb3J0aW5nIGJ1Z3MuIiIiCisKK2ltcG9ydCBzdWJwcm9jZXNzLCBzeXMsIG9zCisKK19fYWxsX18gPSBbJ1JlcG9ydEZhaWx1cmUnLCAnQnVnUmVwb3J0JywgJ2dldFJlcG9ydGVycyddCisKKyMKKworY2xhc3MgUmVwb3J0RmFpbHVyZShFeGNlcHRpb24pOgorICAgICIiIkdlbmVyaWMgZXhjZXB0aW9uIGZvciBmYWlsdXJlcyBpbiBidWcgcmVwb3J0aW5nLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6ICAgICAgICAKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyMgQ29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCBhIGJ1Zy4KKworY2xhc3MgQnVnUmVwb3J0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZSwgZGVzY3JpcHRpb24sIGZpbGVzKToKKyAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLmZpbGVzID0gZmlsZXMKKworIyBSZXBvcnRlciBpbnRlcmZhY2VzLgorCitpbXBvcnQgb3MKKworaW1wb3J0IGVtYWlsLCBtaW1ldHlwZXMsIHNtdHBsaWIKK2Zyb20gZW1haWwgaW1wb3J0IGVuY29kZXJzCitmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKK2Zyb20gZW1haWwubWltZS5iYXNlIGltcG9ydCBNSU1FQmFzZQorZnJvbSBlbWFpbC5taW1lLm11bHRpcGFydCBpbXBvcnQgTUlNRU11bHRpcGFydAorZnJvbSBlbWFpbC5taW1lLnRleHQgaW1wb3J0IE1JTUVUZXh0CisKKyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jCisjIFJlcG9ydGVyUGFyYW1ldGVyCisjPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09IworCitjbGFzcyBSZXBvcnRlclBhcmFtZXRlcjoKKyAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgorICAgIHNlbGYubmFtZSA9IG4KKyAgZGVmIGdldE5hbWUoc2VsZik6CisgICAgcmV0dXJuIHNlbGYubmFtZQorICBkZWYgZ2V0VmFsdWUoc2VsZixyLGJ1Z3R5cGUsZ2V0Q29uZmlnT3B0aW9uKToKKyAgICAgcmV0dXJuIGdldENvbmZpZ09wdGlvbihyLmdldE5hbWUoKSxzZWxmLmdldE5hbWUoKSkKKyAgZGVmIHNhdmVDb25maWdWYWx1ZShzZWxmKToKKyAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBUZXh0UGFyYW1ldGVyIChSZXBvcnRlclBhcmFtZXRlcik6CisgIGRlZiBnZXRIVE1MKHNlbGYscixidWd0eXBlLGdldENvbmZpZ09wdGlvbik6CisgICAgcmV0dXJuICIiIlwKKzx0cj4KKzx0ZCBjbGFzcz0iZm9ybV9jbGFiZWwiPiVzOjwvdGQ+Cis8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSIlc18lcyIgdmFsdWU9IiVzIj48L3RkPgorPC90cj4iIiIlKHNlbGYuZ2V0TmFtZSgpLHIuZ2V0TmFtZSgpLHNlbGYuZ2V0TmFtZSgpLHNlbGYuZ2V0VmFsdWUocixidWd0eXBlLGdldENvbmZpZ09wdGlvbikpCisKK2NsYXNzIFNlbGVjdGlvblBhcmFtZXRlciAoUmVwb3J0ZXJQYXJhbWV0ZXIpOgorICBkZWYgX19pbml0X18oc2VsZiwgbiwgdmFsdWVzKToKKyAgICBSZXBvcnRlclBhcmFtZXRlci5fX2luaXRfXyhzZWxmLG4pCisgICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXMKKyAgICAKKyAgZGVmIGdldEhUTUwoc2VsZixyLGJ1Z3R5cGUsZ2V0Q29uZmlnT3B0aW9uKToKKyAgICBkZWZhdWx0ID0gc2VsZi5nZXRWYWx1ZShyLGJ1Z3R5cGUsZ2V0Q29uZmlnT3B0aW9uKQorICAgIHJldHVybiAiIiJcCis8dHI+Cis8dGQgY2xhc3M9ImZvcm1fY2xhYmVsIj4lczo8L3RkPjx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+PHNlbGVjdCBuYW1lPSIlc18lcyI+CislcworPC9zZWxlY3Q+PC90ZD4iIiIlKHNlbGYuZ2V0TmFtZSgpLHIuZ2V0TmFtZSgpLHNlbGYuZ2V0TmFtZSgpLCdcbicuam9pbihbIiIiXAorPG9wdGlvbiB2YWx1ZT0iJXMiJXM+JXM8L29wdGlvbj4iIiIlKG9bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb1swXSA9PSBkZWZhdWx0IGFuZCAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIG9yICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9bMV0pIGZvciBvIGluIHNlbGYudmFsdWVzXSkpCisKKyM9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0jCisjIFJlcG9ydGVycworIz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PSMKKworY2xhc3MgRW1haWxSZXBvcnRlcjoKKyAgICBkZWYgZ2V0TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdFbWFpbCcKKworICAgIGRlZiBnZXRQYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gbWFwKGxhbWJkYSB4OlRleHRQYXJhbWV0ZXIoeCksWydUbycsICdGcm9tJywgJ1NNVFAgU2VydmVyJywgJ1NNVFAgUG9ydCddKQorCisgICAgIyBMaWZ0ZWQgZnJvbSBweXRob24gZW1haWwgbW9kdWxlIGV4YW1wbGVzLgorICAgIGRlZiBhdHRhY2hGaWxlKHNlbGYsIG91dGVyLCBwYXRoKToKKyAgICAgICAgIyBHdWVzcyB0aGUgY29udGVudCB0eXBlIGJhc2VkIG9uIHRoZSBmaWxlJ3MgZXh0ZW5zaW9uLiAgRW5jb2RpbmcKKyAgICAgICAgIyB3aWxsIGJlIGlnbm9yZWQsIGFsdGhvdWdoIHdlIHNob3VsZCBjaGVjayBmb3Igc2ltcGxlIHRoaW5ncyBsaWtlCisgICAgICAgICMgZ3ppcCdkIG9yIGNvbXByZXNzZWQgZmlsZXMuCisgICAgICAgIGN0eXBlLCBlbmNvZGluZyA9IG1pbWV0eXBlcy5ndWVzc190eXBlKHBhdGgpCisgICAgICAgIGlmIGN0eXBlIGlzIE5vbmUgb3IgZW5jb2RpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIE5vIGd1ZXNzIGNvdWxkIGJlIG1hZGUsIG9yIHRoZSBmaWxlIGlzIGVuY29kZWQgKGNvbXByZXNzZWQpLCBzbworICAgICAgICAgICAgIyB1c2UgYSBnZW5lcmljIGJhZy1vZi1iaXRzIHR5cGUuCisgICAgICAgICAgICBjdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nCisgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gY3R5cGUuc3BsaXQoJy8nLCAxKQorICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6CisgICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCkKKyAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAorICAgICAgICAgICAgbXNnID0gTUlNRVRleHQoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCisgICAgICAgICAgICBtc2cgPSBNSU1FQmFzZShtYWludHlwZSwgc3VidHlwZSkKKyAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChmcC5yZWFkKCkpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICAjIEVuY29kZSB0aGUgcGF5bG9hZCB1c2luZyBCYXNlNjQKKyAgICAgICAgICAgIGVuY29kZXJzLmVuY29kZV9iYXNlNjQobXNnKQorICAgICAgICAjIFNldCB0aGUgZmlsZW5hbWUgcGFyYW1ldGVyCisgICAgICAgIG1zZy5hZGRfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLCBmaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHBhdGgpKQorICAgICAgICBvdXRlci5hdHRhY2gobXNnKQorCisgICAgZGVmIGZpbGVSZXBvcnQoc2VsZiwgcmVwb3J0LCBwYXJhbWV0ZXJzKToKKyAgICAgICAgbWFpbk1zZyA9ICIiIlwKK0JVRyBSRVBPUlQKKy0tLQorVGl0bGU6ICVzCitEZXNjcmlwdGlvbjogJXMKKyIiIiUocmVwb3J0LnRpdGxlLCByZXBvcnQuZGVzY3JpcHRpb24pCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnMuZ2V0KCdUbycpOgorICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZSgnTm8gIlRvIiBhZGRyZXNzIHNwZWNpZmllZC4nKQorICAgICAgICBpZiBub3QgcGFyYW1ldGVycy5nZXQoJ0Zyb20nKToKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoJ05vICJGcm9tIiBhZGRyZXNzIHNwZWNpZmllZC4nKQorCisgICAgICAgIG1zZyA9IE1JTUVNdWx0aXBhcnQoKQorICAgICAgICBtc2dbJ1N1YmplY3QnXSA9ICdCVUcgUkVQT1JUOiAlcyclKHJlcG9ydC50aXRsZSkKKyAgICAgICAgIyBGSVhNRTogR2V0IGNvbmZpZyBwYXJhbWV0ZXJzCisgICAgICAgIG1zZ1snVG8nXSA9IHBhcmFtZXRlcnMuZ2V0KCdUbycpCisgICAgICAgIG1zZ1snRnJvbSddID0gcGFyYW1ldGVycy5nZXQoJ0Zyb20nKQorICAgICAgICBtc2cucHJlYW1ibGUgPSBtYWluTXNnCisKKyAgICAgICAgbXNnLmF0dGFjaChNSU1FVGV4dChtYWluTXNnLCBfc3VidHlwZT0ndGV4dC9wbGFpbicpKQorICAgICAgICBmb3IgZmlsZSBpbiByZXBvcnQuZmlsZXM6CisgICAgICAgICAgICBzZWxmLmF0dGFjaEZpbGUobXNnLCBmaWxlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzbXRwbGliLlNNVFAoaG9zdD1wYXJhbWV0ZXJzLmdldCgnU01UUCBTZXJ2ZXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD1wYXJhbWV0ZXJzLmdldCgnU01UUCBQb3J0JykpCisgICAgICAgICAgICBzLnNlbmRtYWlsKG1zZ1snRnJvbSddLCBtc2dbJ1RvJ10sIG1zZy5hc19zdHJpbmcoKSkKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByYWlzZSBSZXBvcnRGYWlsdXJlKCdVbmFibGUgdG8gc2VuZCBtZXNzYWdlIHZpYSBTTVRQLicpCisKKyAgICAgICAgcmV0dXJuICJNZXNzYWdlIHNlbnQhIgorCitjbGFzcyBCdWd6aWxsYVJlcG9ydGVyOgorICAgIGRlZiBnZXROYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0J1Z3ppbGxhJworICAgIAorICAgIGRlZiBnZXRQYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gbWFwKGxhbWJkYSB4OlRleHRQYXJhbWV0ZXIoeCksWydVUkwnLCdQcm9kdWN0J10pCisKKyAgICBkZWYgZmlsZVJlcG9ydChzZWxmLCByZXBvcnQsIHBhcmFtZXRlcnMpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgCisKK2NsYXNzIFJhZGFyQ2xhc3NpZmljYXRpb25QYXJhbWV0ZXIoU2VsZWN0aW9uUGFyYW1ldGVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIFNlbGVjdGlvblBhcmFtZXRlci5fX2luaXRfXyhzZWxmLCJDbGFzc2lmaWNhdGlvbiIsCisgICAgICAgICAgICBbWycxJywgJ1NlY3VyaXR5J10sIFsnMicsICdDcmFzaC9IYW5nL0RhdGEgTG9zcyddLAorICAgICAgICAgICAgIFsnMycsICdQZXJmb3JtYW5jZSddLCBbJzQnLCAnVUkvVXNhYmlsaXR5J10sIAorICAgICAgICAgICAgIFsnNicsICdTZXJpb3VzIEJ1ZyddLCBbJzcnLCAnT3RoZXInXV0pCisKKyAgZGVmIHNhdmVDb25maWdWYWx1ZShzZWxmKToKKyAgICByZXR1cm4gRmFsc2UKKyAgICAKKyAgZGVmIGdldFZhbHVlKHNlbGYscixidWd0eXBlLGdldENvbmZpZ09wdGlvbik6CisgICAgaWYgYnVndHlwZS5maW5kKCJsZWFrIikgIT0gLTE6CisgICAgICByZXR1cm4gJzMnCisgICAgZWxpZiBidWd0eXBlLmZpbmQoImRlcmVmZXJlbmNlIikgIT0gLTE6CisgICAgICByZXR1cm4gJzInCisgICAgZWxpZiBidWd0eXBlLmZpbmQoIm1pc3NpbmcgaXZhciByZWxlYXNlIikgIT0gLTE6CisgICAgICByZXR1cm4gJzMnCisgICAgZWxzZToKKyAgICAgIHJldHVybiAnNycKKworY2xhc3MgUmFkYXJSZXBvcnRlcjoKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGlzQXZhaWxhYmxlKCk6CisgICAgICAgICMgRklYTUU6IEZpbmQgdGhpcyAuc2NwdCBiZXR0ZXIKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCcuLi9zaGFyZS9zY2FuLXZpZXcvR2V0UmFkYXJWZXJzaW9uLnNjcHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWydvc2FzY3JpcHQnLHBhdGhdLCAKKyAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZGF0YSxlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcmVzID0gcC53YWl0KCkKKyAgICAgICAgIyBGSVhNRTogQ2hlY2sgdmVyc2lvbj8gQ2hlY2sgZm9yIG5vIGVycm9ycz8KKyAgICAgICAgcmV0dXJuIHJlcyA9PSAwCisKKyAgICBkZWYgZ2V0TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICdSYWRhcicKKworICAgIGRlZiBnZXRQYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gWyBUZXh0UGFyYW1ldGVyKCdDb21wb25lbnQnKSwgVGV4dFBhcmFtZXRlcignQ29tcG9uZW50IFZlcnNpb24nKSwKKyAgICAgICAgICAgICAgICAgUmFkYXJDbGFzc2lmaWNhdGlvblBhcmFtZXRlcigpIF0KKworICAgIGRlZiBmaWxlUmVwb3J0KHNlbGYsIHJlcG9ydCwgcGFyYW1ldGVycyk6CisgICAgICAgIGNvbXBvbmVudCA9IHBhcmFtZXRlcnMuZ2V0KCdDb21wb25lbnQnLCAnJykKKyAgICAgICAgY29tcG9uZW50VmVyc2lvbiA9IHBhcmFtZXRlcnMuZ2V0KCdDb21wb25lbnQgVmVyc2lvbicsICcnKQorICAgICAgICBjbGFzc2lmaWNhdGlvbiA9IHBhcmFtZXRlcnMuZ2V0KCdDbGFzc2lmaWNhdGlvbicsICcnKQorICAgICAgICBwZXJzb25JRCA9ICIiCisgICAgICAgIGRpYWdub3NpcyA9ICIiCisgICAgICAgIGNvbmZpZyA9ICIiCisKKyAgICAgICAgaWYgbm90IGNvbXBvbmVudC5zdHJpcCgpOgorICAgICAgICAgICAgY29tcG9uZW50ID0gJ0J1Z3MgZm91bmQgYnkgY2xhbmcgQW5hbHl6ZXInCisgICAgICAgIGlmIG5vdCBjb21wb25lbnRWZXJzaW9uLnN0cmlwKCk6CisgICAgICAgICAgICBjb21wb25lbnRWZXJzaW9uID0gJ1gnCisKKyAgICAgICAgc2NyaXB0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksJy4uL3NoYXJlL3NjYW4tdmlldy9GaWxlUmFkYXIuc2NwdCcpCisgICAgICAgIGFyZ3MgPSBbJ29zYXNjcmlwdCcsIHNjcmlwdCwgY29tcG9uZW50LCBjb21wb25lbnRWZXJzaW9uLCBjbGFzc2lmaWNhdGlvbiwgcGVyc29uSUQsIHJlcG9ydC50aXRsZSwKKyAgICAgICAgICAgICAgICByZXBvcnQuZGVzY3JpcHRpb24sIGRpYWdub3NpcywgY29uZmlnXSArIG1hcChvcy5wYXRoLmFic3BhdGgsIHJlcG9ydC5maWxlcykKKyMgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgYXJncworICAgICAgICB0cnk6CisgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZSgiVW5hYmxlIHRvIGZpbGUgcmFkYXIgKEFwcGxlU2NyaXB0IGZhaWx1cmUpLiIpCisgICAgICAgIGRhdGEsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICByZXMgPSBwLndhaXQoKQorCisgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgIHJhaXNlIFJlcG9ydEZhaWx1cmUoIlVuYWJsZSB0byBmaWxlIHJhZGFyIChBcHBsZVNjcmlwdCBmYWlsdXJlKS4iKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlcyA9IGV2YWwoZGF0YSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZSgiVW5hYmxlIHRvIHByb2Nlc3MgcmFkYXIgcmVzdWx0cy4iKQorCisgICAgICAgICMgV2UgZXhwZWN0IChpbnQ6IGJ1Z0lELCBzdHI6IG1lc3NhZ2UpCisgICAgICAgIGlmIGxlbih2YWx1ZXMpICE9IDIgb3Igbm90IGlzaW5zdGFuY2UodmFsdWVzWzBdLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgUmVwb3J0RmFpbHVyZSgiVW5hYmxlIHRvIHByb2Nlc3MgcmFkYXIgcmVzdWx0cy4iKQorCisgICAgICAgIGJ1Z0lELG1lc3NhZ2UgPSB2YWx1ZXMKKyAgICAgICAgYnVnSUQgPSBpbnQoYnVnSUQpCisgICAgICAgIAorICAgICAgICBpZiBub3QgYnVnSUQ6CisgICAgICAgICAgICByYWlzZSBSZXBvcnRGYWlsdXJlKG1lc3NhZ2UpCisgICAgICAgIAorICAgICAgICByZXR1cm4gIkZpbGVkOiA8YSBocmVmPVwicmRhcjovLyVkL1wiPiVkPC9hPiIlKGJ1Z0lELGJ1Z0lEKQorCisjIyMKKworZGVmIGdldFJlcG9ydGVycygpOgorICAgIHJlcG9ydGVycyA9IFtdCisgICAgaWYgUmFkYXJSZXBvcnRlci5pc0F2YWlsYWJsZSgpOgorICAgICAgICByZXBvcnRlcnMuYXBwZW5kKFJhZGFyUmVwb3J0ZXIoKSkKKyAgICByZXBvcnRlcnMuYXBwZW5kKEVtYWlsUmVwb3J0ZXIoKSkKKyAgICByZXR1cm4gcmVwb3J0ZXJzCisKZGlmZiAtLWdpdCBhL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1NjYW5WaWV3LnB5IGIvY2xhbmctMjY5MDM4NS90b29scy9zY2FuLXZpZXcvc2hhcmUvU2NhblZpZXcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjMDM1MQotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL1NjYW5WaWV3LnB5CkBAIC0wLDAgKzEsNzY3IEBACitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2ltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1cmxsaWIsIHVybHBhcnNlCitpbXBvcnQgcG9zaXhwYXRoCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBpdGVydG9vbHMKKworaW1wb3J0IFJlcG9ydGVyCitpbXBvcnQgQ29uZmlnUGFyc2VyCisKKyMjIworIyBWYXJpb3VzIHBhdHRlcm5zIG1hdGNoZWQgb3IgcmVwbGFjZWQgYnkgc2VydmVyLgorCitrUmVwb3J0RmlsZVJFID0gcmUuY29tcGlsZSgnKC4qLyk/cmVwb3J0LSguKilcXC5odG1sJykKKwora0J1Z0tleVZhbHVlUkUgPSByZS5jb21waWxlKCc8IS0tIEJVRyhbXiBdKikgKC4qKSAtLT4nKQorCisjICA8IS0tIFJFUE9SVFBST0JMRU0gZmlsZT0iY3Jhc2hlcy9jbGFuZ19jcmFzaF9uZFNHRjkubWkiIHN0ZGVycj0iY3Jhc2hlcy9jbGFuZ19jcmFzaF9uZFNHRjkubWkuc3RkZXJyLnR4dCIgaW5mbz0iY3Jhc2hlcy9jbGFuZ19jcmFzaF9uZFNHRjkubWkuaW5mbyIgLS0+CisKK2tSZXBvcnRDcmFzaEVudHJ5UkUgPSByZS5jb21waWxlKCc8IS0tIFJFUE9SVFBST0JMRU0gKC4qPyktLT4nKQora1JlcG9ydENyYXNoRW50cnlLZXlWYWx1ZVJFID0gcmUuY29tcGlsZSgnID8oW149XSspPSIoLio/KSInKQorCitrUmVwb3J0UmVwbGFjZW1lbnRzID0gW10KKworIyBBZGQgY3VzdG9tIGphdmFzY3JpcHQuCitrUmVwb3J0UmVwbGFjZW1lbnRzLmFwcGVuZCgocmUuY29tcGlsZSgnPCEtLSBTVU1NQVJZRU5ESEVBRCAtLT4nKSwgIiIiXAorPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGxvYWQodXJsKSB7CisgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKKyAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgfSBlbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgeworICAgIHJlcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOworICB9CisgIGlmIChyZXEgIT0gdW5kZWZpbmVkKSB7CisgICAgcmVxLm9wZW4oIkdFVCIsIHVybCwgdHJ1ZSk7CisgICAgcmVxLnNlbmQoIiIpOworICB9Cit9Cis8L3NjcmlwdD4iIiIpKQorCisjIEluc2VydCBhZGRpdGlvbmFsIGNvbHVtbnMuCitrUmVwb3J0UmVwbGFjZW1lbnRzLmFwcGVuZCgocmUuY29tcGlsZSgnPCEtLSBSRVBPUlRCVUdDT0wgLS0+JyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dGQ+PC90ZD48dGQ+PC90ZD4nKSkKKworIyBJbnNlcnQgcmVwb3J0IGJ1ZyBhbmQgb3BlbiBmaWxlIGxpbmtzLgora1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gUkVQT1JUQlVHIGlkPSJyZXBvcnQtKC4qKVxcLmh0bWwiIC0tPicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPHRkIGNsYXNzPSJCdXR0b24iPjxhIGhyZWY9InJlcG9ydC9cXDEiPlJlcG9ydCBCdWc8L2E+PC90ZD4nICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dGQgY2xhc3M9IkJ1dHRvbiI+PGEgaHJlZj0iamF2YXNjcmlwdDpsb2FkKFwnb3Blbi9cXDFcJykiPk9wZW4gRmlsZTwvYT48L3RkPicpKSkKKwora1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gUkVQT1JUSEVBREVSIC0tPicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxoMz48YSBocmVmPSIvIj5TdW1tYXJ5PC9hPiA+IFJlcG9ydCAlKHJlcG9ydClzPC9oMz4nKSkKKwora1JlcG9ydFJlcGxhY2VtZW50cy5hcHBlbmQoKHJlLmNvbXBpbGUoJzwhLS0gUkVQT1JUU1VNTUFSWUVYVFJBIC0tPicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dGQgY2xhc3M9IkJ1dHRvbiI+PGEgaHJlZj0icmVwb3J0LyUocmVwb3J0KXMiPlJlcG9ydCBCdWc8L2E+PC90ZD4nKSkKKworIyBJbnNlcnQgcmVwb3J0IGNyYXNoZXMgbGluay4KKworIyBEaXNhYmxlZCBmb3IgdGhlIHRpbWUgYmVpbmcgdW50aWwgd2UgZGVjaWRlIGV4YWN0bHkgd2hlbiB0aGlzIHNob3VsZAorIyBiZSBlbmFibGVkLiBBbHNvIHRoZSByYWRhciByZXBvcnRlciBuZWVkcyB0byBiZSBmaXhlZCB0byByZXBvcnQKKyMgbXVsdGlwbGUgZmlsZXMuCisKKyNrUmVwb3J0UmVwbGFjZW1lbnRzLmFwcGVuZCgocmUuY29tcGlsZSgnPCEtLSBSRVBPUlRDUkFTSEVTIC0tPicpLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJyPlRoZXNlIGZpbGVzIHdpbGwgYXV0b21hdGljYWxseSBiZSBhdHRhY2hlZCB0byAnICsKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcG9ydHMgZmlsZWQgaGVyZTogPGEgaHJlZj0icmVwb3J0X2NyYXNoZXMiPlJlcG9ydCBDcmFzaGVzPC9hPi4nKSkKKworIyMjCisjIE90aGVyIHNpbXBsZSBwYXJhbWV0ZXJzCisKK2tTaGFyZSA9IHBvc2l4cGF0aC5qb2luKHBvc2l4cGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uL3NoYXJlL3NjYW4tdmlldycpCitrQ29uZmlnUGF0aCA9IG9zLnBhdGguZXhwYW5kdXNlcignfi8uc2NhbnZpZXcuY2ZnJykKKworIyMjCisKK19fdmVyc2lvbl9fID0gIjAuMSIKKworX19hbGxfXyA9IFsiY3JlYXRlX3NlcnZlciJdCisKK2NsYXNzIFJlcG9ydGVyVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvcnQsIHJlcG9ydGVyLCBwYXJhbWV0ZXJzLCBzZXJ2ZXIpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYucmVwb3J0ID0gcmVwb3J0CisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYucmVwb3J0ZXIgPSByZXBvcnRlcgorICAgICAgICBzZWxmLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuc3VjY2VzcyA9IEZhbHNlCisgICAgICAgIHNlbGYuc3RhdHVzID0gTm9uZQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5vcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIiVzOiBTRVJWRVI6IHN1Ym1pdHRpbmcgYnVnLiIlKHN5cy5hcmd2WzBdLCkKKyAgICAgICAgICAgIHNlbGYuc3RhdHVzID0gc2VsZi5yZXBvcnRlci5maWxlUmVwb3J0KHNlbGYucmVwb3J0LCBzZWxmLnBhcmFtZXRlcnMpCisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBUcnVlCisgICAgICAgICAgICB0aW1lLnNsZWVwKDMpCisgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5vcHRpb25zLmRlYnVnOgorICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIiVzOiBTRVJWRVI6IHN1Ym1pc3Npb24gY29tcGxldGUuIiUoc3lzLmFyZ3ZbMF0sKQorICAgICAgICBleGNlcHQgUmVwb3J0ZXIuUmVwb3J0RmFpbHVyZSxlOgorICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSBlLnZhbHVlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICBwcmludCA+PnMsJzxiPlVuaGFuZGxlZCBFeGNlcHRpb248L2I+PGJyPjxwcmU+JworICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhlLGZpbGU9cykKKyAgICAgICAgICAgIHByaW50ID4+cywnPC9wcmU+JworICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSBzLmdldHZhbHVlKCkKKworY2xhc3MgU2NhblZpZXdTZXJ2ZXIoQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MsIGhhbmRsZXIsIHJvb3QsIHJlcG9ydGVycywgb3B0aW9ucyk6CisgICAgICAgIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgYWRkcmVzcywgaGFuZGxlcikKKyAgICAgICAgc2VsZi5yb290ID0gcm9vdAorICAgICAgICBzZWxmLnJlcG9ydGVycyA9IHJlcG9ydGVycworICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zICAgICAgICAKKyAgICAgICAgc2VsZi5oYWx0ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbmZpZyA9IE5vbmUKKyAgICAgICAgc2VsZi5sb2FkX2NvbmZpZygpCisKKyAgICBkZWYgbG9hZF9jb25maWcoc2VsZik6CisgICAgICAgIHNlbGYuY29uZmlnID0gQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlcigpCisKKyAgICAgICAgIyBBZGQgZGVmYXVsdHMKKyAgICAgICAgc2VsZi5jb25maWcuYWRkX3NlY3Rpb24oJ1NjYW5WaWV3JykKKyAgICAgICAgZm9yIHIgaW4gc2VsZi5yZXBvcnRlcnM6CisgICAgICAgICAgICBzZWxmLmNvbmZpZy5hZGRfc2VjdGlvbihyLmdldE5hbWUoKSkKKyAgICAgICAgICAgIGZvciBwIGluIHIuZ2V0UGFyYW1ldGVycygpOgorICAgICAgICAgICAgICBpZiBwLnNhdmVDb25maWdWYWx1ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnNldChyLmdldE5hbWUoKSwgcC5nZXROYW1lKCksICcnKQorCisgICAgICAgICMgSWdub3JlIHBhcnNlIGVycm9ycworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNvbmZpZy5yZWFkKFtrQ29uZmlnUGF0aF0pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFNhdmUgb24gZXhpdAorICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihsYW1iZGE6IHNlbGYuc2F2ZV9jb25maWcoKSkKKyAgICAgICAgCisgICAgZGVmIHNhdmVfY29uZmlnKHNlbGYpOgorICAgICAgICAjIElnbm9yZSBlcnJvcnMgKG9ubHkgY2FsbGVkIG9uIGV4aXQpLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihrQ29uZmlnUGF0aCwndycpCisgICAgICAgICAgICBzZWxmLmNvbmZpZy53cml0ZShmKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgCisgICAgZGVmIGhhbHQoc2VsZik6CisgICAgICAgIHNlbGYuaGFsdGVkID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLm9wdGlvbnMuZGVidWc6CisgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIlczogU0VSVkVSOiBoYWx0aW5nLiIgJSAoc3lzLmFyZ3ZbMF0sKQorCisgICAgZGVmIHNlcnZlX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLmhhbHRlZDoKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5kZWJ1ZyA+IDE6CisgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiJXM6IFNFUlZFUjogd2FpdGluZy4uLiIgJSAoc3lzLmFyZ3ZbMF0sKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsZToKKyAgICAgICAgICAgICAgICBwcmludCAnT1NFcnJvcicsZS5lcnJubworCisgICAgZGVmIGZpbmlzaF9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLmF1dG9SZWxvYWQ6CisgICAgICAgICAgICBpbXBvcnQgU2NhblZpZXcKKyAgICAgICAgICAgIHNlbGYuUmVxdWVzdEhhbmRsZXJDbGFzcyA9IHJlbG9hZChTY2FuVmlldykuU2NhblZpZXdSZXF1ZXN0SGFuZGxlcgorICAgICAgICBCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyLmZpbmlzaF9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICMgSWdub3JlIHNvY2tldCBlcnJvcnMKKyAgICAgICAgaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGlmIGluZm8gYW5kIGlzaW5zdGFuY2UoaW5mb1sxXSwgc29ja2V0LmVycm9yKToKKyAgICAgICAgICAgIGlmIHNlbGYub3B0aW9ucy5kZWJ1ZyA+IDE6CisgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiJXM6IFNFUlZFUjogaWdub3JlZCBzb2NrZXQgZXJyb3IuIiAlIChzeXMuYXJndlswXSwpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5oYW5kbGVfZXJyb3Ioc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisKKyMgQm9ycm93ZWQgZnJvbSBRdWl4b3RlLCB3aXRoIHNpbXBsaWZpY2F0aW9ucy4KK2RlZiBwYXJzZV9xdWVyeShxcywgZmllbGRzPU5vbmUpOgorICAgIGlmIGZpZWxkcyBpcyBOb25lOgorICAgICAgICBmaWVsZHMgPSB7fQorICAgIGZvciBjaHVuayBpbiBmaWx0ZXIoTm9uZSwgcXMuc3BsaXQoJyYnKSk6CisgICAgICAgIGlmICc9JyBub3QgaW4gY2h1bms6CisgICAgICAgICAgICBuYW1lID0gY2h1bmsKKyAgICAgICAgICAgIHZhbHVlID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gY2h1bmsuc3BsaXQoJz0nLCAxKQorICAgICAgICBuYW1lID0gdXJsbGliLnVucXVvdGUobmFtZS5yZXBsYWNlKCcrJywgJyAnKSkKKyAgICAgICAgdmFsdWUgPSB1cmxsaWIudW5xdW90ZSh2YWx1ZS5yZXBsYWNlKCcrJywgJyAnKSkKKyAgICAgICAgaXRlbSA9IGZpZWxkcy5nZXQobmFtZSkKKyAgICAgICAgaWYgaXRlbSBpcyBOb25lOgorICAgICAgICAgICAgZmllbGRzW25hbWVdID0gW3ZhbHVlXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXRlbS5hcHBlbmQodmFsdWUpCisgICAgcmV0dXJuIGZpZWxkcworCitjbGFzcyBTY2FuVmlld1JlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICBzZXJ2ZXJfdmVyc2lvbiA9ICJTY2FuVmlld1NlcnZlci8iICsgX192ZXJzaW9uX18KKyAgICBkeW5hbWljX210aW1lID0gdGltZS50aW1lKCkKKworICAgIGRlZiBkb19IRUFEKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5kb19IRUFEKHNlbGYpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2V4Y2VwdGlvbihlKQorICAgICAgICAgICAgCisgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fR0VUKHNlbGYpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2V4Y2VwdGlvbihlKQorICAgICAgICAgICAgCisgICAgZGVmIGRvX1BPU1Qoc2VsZik6CisgICAgICAgICIiIlNlcnZlIGEgUE9TVCByZXF1ZXN0LiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmhlYWRlcnMuZ2V0aGVhZGVyKCdjb250ZW50LWxlbmd0aCcpIG9yICIwIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGludChsZW5ndGgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgbGVuZ3RoID0gMAorICAgICAgICAgICAgY29udGVudCA9IHNlbGYucmZpbGUucmVhZChsZW5ndGgpCisgICAgICAgICAgICBmaWVsZHMgPSBwYXJzZV9xdWVyeShjb250ZW50KQorICAgICAgICAgICAgZiA9IHNlbGYuc2VuZF9oZWFkKGZpZWxkcykKKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgc2VsZi5jb3B5ZmlsZShmLCBzZWxmLndmaWxlKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9leGNlcHRpb24oZSkgICAgICAgICAgICAKKworICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKKyAgICAgICAgaWYgc2VsZi5zZXJ2ZXIub3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzOiBTRVJWRVI6ICVzIC0gLSBbJXNdICVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5cy5hcmd2WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRyZXNzX3N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dfZGF0ZV90aW1lX3N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0JWFyZ3MpKQorCisgICAgZGVmIGxvYWRfcmVwb3J0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwgJ3JlcG9ydC0lcy5odG1sJyVyZXBvcnQpCisgICAgICAgIGRhdGEgPSBvcGVuKHBhdGgpLnJlYWQoKQorICAgICAgICBrZXlzID0ge30KKyAgICAgICAgZm9yIGl0ZW0gaW4ga0J1Z0tleVZhbHVlUkUuZmluZGl0ZXIoZGF0YSk6CisgICAgICAgICAgICBrLHYgPSBpdGVtLmdyb3VwcygpCisgICAgICAgICAgICBrZXlzW2tdID0gdgorICAgICAgICByZXR1cm4ga2V5cworCisgICAgZGVmIGxvYWRfY3Jhc2hlcyhzZWxmKToKKyAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsICdpbmRleC5odG1sJykKKyAgICAgICAgZGF0YSA9IG9wZW4ocGF0aCkucmVhZCgpCisgICAgICAgIHByb2JsZW1zID0gW10KKyAgICAgICAgZm9yIGl0ZW0gaW4ga1JlcG9ydENyYXNoRW50cnlSRS5maW5kaXRlcihkYXRhKToKKyAgICAgICAgICAgIGZpZWxkRGF0YSA9IGl0ZW0uZ3JvdXAoMSkKKyAgICAgICAgICAgIGZpZWxkcyA9IGRpY3QoW2kuZ3JvdXBzKCkgZm9yIGkgaW4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICBrUmVwb3J0Q3Jhc2hFbnRyeUtleVZhbHVlUkUuZmluZGl0ZXIoZmllbGREYXRhKV0pCisgICAgICAgICAgICBwcm9ibGVtcy5hcHBlbmQoZmllbGRzKQorICAgICAgICByZXR1cm4gcHJvYmxlbXMKKworICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIGV4Yyk6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgcHJpbnQgPj5zLCAiSU5URVJOQUwgRVJST1JcbiIKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhleGMsIHMpCisgICAgICAgIGYgPSBzZWxmLnNlbmRfc3RyaW5nKHMuZ2V0dmFsdWUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBpZiBmOgorICAgICAgICAgICAgc2VsZi5jb3B5ZmlsZShmLCBzZWxmLndmaWxlKQorICAgICAgICAgICAgZi5jbG9zZSgpICAgICAgICAKKyAgICAgICAgICAgIAorICAgIGRlZiBnZXRfc2NhbGFyX2ZpZWxkKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuZmllbGRzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmllbGRzW25hbWVdWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHN1Ym1pdF9idWcoc2VsZiwgYyk6CisgICAgICAgIHRpdGxlID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCd0aXRsZScpCisgICAgICAgIGRlc2NyaXB0aW9uID0gc2VsZi5nZXRfc2NhbGFyX2ZpZWxkKCdkZXNjcmlwdGlvbicpCisgICAgICAgIHJlcG9ydCA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgncmVwb3J0JykKKyAgICAgICAgcmVwb3J0ZXJJbmRleCA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZCgncmVwb3J0ZXInKQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZvciBmaWxlSUQgaW4gc2VsZi5maWVsZHMuZ2V0KCdmaWxlcycsW10pOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGkgPSBpbnQoZmlsZUlEKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGkgPSBOb25lCisgICAgICAgICAgICBpZiBpIGlzIE5vbmUgb3IgaTwwIG9yIGk+PWxlbihjLmZpbGVzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKEZhbHNlLCAnSW52YWxpZCBmaWxlIElEJykKKyAgICAgICAgICAgIGZpbGVzLmFwcGVuZChjLmZpbGVzW2ldKQorICAgICAgICAKKyAgICAgICAgaWYgbm90IHRpdGxlOgorICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgIk1pc3NpbmcgdGl0bGUuIikKKyAgICAgICAgaWYgbm90IGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgIk1pc3NpbmcgZGVzY3JpcHRpb24uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVwb3J0ZXJJbmRleCA9IGludChyZXBvcnRlckluZGV4KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gKEZhbHNlLCAiSW52YWxpZCByZXBvcnQgbWV0aG9kLiIpCisgICAgICAgIAorICAgICAgICAjIEdldCB0aGUgcmVwb3J0ZXIgYW5kIHBhcmFtZXRlcnMuCisgICAgICAgIHJlcG9ydGVyID0gc2VsZi5zZXJ2ZXIucmVwb3J0ZXJzW3JlcG9ydGVySW5kZXhdCisgICAgICAgIHBhcmFtZXRlcnMgPSB7fQorICAgICAgICBmb3IgbyBpbiByZXBvcnRlci5nZXRQYXJhbWV0ZXJzKCk6CisgICAgICAgICAgICBuYW1lID0gJyVzXyVzJyUocmVwb3J0ZXIuZ2V0TmFtZSgpLG8uZ2V0TmFtZSgpKQorICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5maWVsZHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAnTWlzc2luZyBmaWVsZCAiJXMiIGZvciAlcyByZXBvcnQgbWV0aG9kLiclKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLmdldE5hbWUoKSkpCisgICAgICAgICAgICBwYXJhbWV0ZXJzW28uZ2V0TmFtZSgpXSA9IHNlbGYuZ2V0X3NjYWxhcl9maWVsZChuYW1lKQorCisgICAgICAgICMgVXBkYXRlIGNvbmZpZyBkZWZhdWx0cy4KKyAgICAgICAgaWYgcmVwb3J0ICE9ICdOb25lJzoKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmNvbmZpZy5zZXQoJ1NjYW5WaWV3JywgJ3JlcG9ydGVyJywgcmVwb3J0ZXJJbmRleCkKKyAgICAgICAgICAgIGZvciBvIGluIHJlcG9ydGVyLmdldFBhcmFtZXRlcnMoKToKKyAgICAgICAgICAgICAgaWYgby5zYXZlQ29uZmlnVmFsdWUoKToKKyAgICAgICAgICAgICAgICBuYW1lID0gby5nZXROYW1lKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5jb25maWcuc2V0KHJlcG9ydGVyLmdldE5hbWUoKSwgbmFtZSwgcGFyYW1ldGVyc1tuYW1lXSkKKworICAgICAgICAjIENyZWF0ZSB0aGUgcmVwb3J0LgorICAgICAgICBidWcgPSBSZXBvcnRlci5CdWdSZXBvcnQodGl0bGUsIGRlc2NyaXB0aW9uLCBmaWxlcykKKworICAgICAgICAjIEtpY2sgb2ZmIGEgcmVwb3J0aW5nIHRocmVhZC4KKyAgICAgICAgdCA9IFJlcG9ydGVyVGhyZWFkKGJ1ZywgcmVwb3J0ZXIsIHBhcmFtZXRlcnMsIHNlbGYuc2VydmVyKQorICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICAjIFdhaXQgZm9yIHRocmVhZCB0byBkaWUuLi4KKyAgICAgICAgd2hpbGUgdC5pc0FsaXZlKCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKC4yNSkKKyAgICAgICAgc3VibWl0U3RhdHVzID0gdC5zdGF0dXMKKworICAgICAgICByZXR1cm4gKHQuc3VjY2VzcywgdC5zdGF0dXMpCisKKyAgICBkZWYgc2VuZF9yZXBvcnRfc3VibWl0KHNlbGYpOgorICAgICAgICByZXBvcnQgPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ3JlcG9ydCcpCisgICAgICAgIGMgPSBzZWxmLmdldF9yZXBvcnRfY29udGV4dChyZXBvcnQpCisgICAgICAgIGlmIGMucmVwb3J0U291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXBvcnRpbmdGb3IgPSAiUmVwb3J0IENyYXNoZXMgPiAiCisgICAgICAgICAgICBmaWxlQnVnID0gIiIiXAorPGEgaHJlZj0iL3JlcG9ydF9jcmFzaGVzIj5GaWxlIEJ1ZzwvYT4gPiAiIiIlbG9jYWxzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcG9ydGluZ0ZvciA9ICc8YSBocmVmPSIvJXMiPlJlcG9ydCAlczwvYT4gPiAnICUgKGMucmVwb3J0U291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQpCisgICAgICAgICAgICBmaWxlQnVnID0gJzxhIGhyZWY9Ii9yZXBvcnQvJXMiPkZpbGUgQnVnPC9hPiA+ICcgJSByZXBvcnQKKyAgICAgICAgdGl0bGUgPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ3RpdGxlJykKKyAgICAgICAgZGVzY3JpcHRpb24gPSBzZWxmLmdldF9zY2FsYXJfZmllbGQoJ2Rlc2NyaXB0aW9uJykKKworICAgICAgICByZXMsbWVzc2FnZSA9IHNlbGYuc3VibWl0X2J1ZyhjKQorCisgICAgICAgIGlmIHJlczoKKyAgICAgICAgICAgIHN0YXR1c0NsYXNzID0gJ1N1Ym1pdE9rJworICAgICAgICAgICAgc3RhdHVzTmFtZSA9ICdTdWNjZWVkZWQnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0dXNDbGFzcyA9ICdTdWJtaXRGYWlsJworICAgICAgICAgICAgc3RhdHVzTmFtZSA9ICdGYWlsZWQnCisKKyAgICAgICAgcmVzdWx0ID0gIiIiCis8aGVhZD4KKyAgPHRpdGxlPkJ1ZyBTdWJtaXNzaW9uPC90aXRsZT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3NjYW52aWV3LmNzcyIgLz4KKzwvaGVhZD4KKzxib2R5PgorPGgzPgorPGEgaHJlZj0iLyI+U3VtbWFyeTwvYT4gPiAKKyUocmVwb3J0aW5nRm9yKXMKKyUoZmlsZUJ1ZylzCitTdWJtaXQ8L2gzPgorPGZvcm0gbmFtZT0iZm9ybSIgYWN0aW9uPSIiPgorPHRhYmxlIGNsYXNzPSJmb3JtIj4KKzx0cj48dGQ+Cis8dGFibGUgY2xhc3M9ImZvcm1fZ3JvdXAiPgorPHRyPgorICA8dGQgY2xhc3M9ImZvcm1fY2xhYmVsIj5UaXRsZTo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgc2l6ZT0iNTAiIHZhbHVlPSIlKHRpdGxlKXMiIGRpc2FibGVkPgorICA8L3RkPgorPC90cj4KKzx0cj4KKyAgPHRkIGNsYXNzPSJmb3JtX2xhYmVsIj5EZXNjcmlwdGlvbjo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorPHRleHRhcmVhIHJvd3M9IjEwIiBjb2xzPSI4MCIgbmFtZT0iZGVzY3JpcHRpb24iIGRpc2FibGVkPgorJShkZXNjcmlwdGlvbilzCis8L3RleHRhcmVhPgorICA8L3RkPgorPC90YWJsZT4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L2Zvcm0+Cis8aDEgY2xhc3M9IiUoc3RhdHVzQ2xhc3MpcyI+U3VibWlzc2lvbiAlKHN0YXR1c05hbWUpczwvaDE+CislKG1lc3NhZ2UpcworPHA+Cis8aHI+Cis8YSBocmVmPSIvIj5SZXR1cm4gdG8gU3VtbWFyeTwvYT4KKzwvYm9keT4KKzwvaHRtbD4iIiIlbG9jYWxzKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zdHJpbmcocmVzdWx0KQorCisgICAgZGVmIHNlbmRfb3Blbl9yZXBvcnQoc2VsZiwgcmVwb3J0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5cyA9IHNlbGYubG9hZF9yZXBvcnQocmVwb3J0KQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZXJyb3IoNDAwLCAnSW52YWxpZCByZXBvcnQuJykKKworICAgICAgICBmaWxlID0ga2V5cy5nZXQoJ0ZJTEUnKQorICAgICAgICBpZiBub3QgZmlsZSBvciBub3QgcG9zaXhwYXRoLmV4aXN0cyhmaWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZXJyb3IoNDAwLCAnRmlsZSBkb2VzIG5vdCBleGlzdDogIiVzIicgJSBmaWxlKQorCisgICAgICAgIGltcG9ydCBzdGFydGZpbGUKKyAgICAgICAgaWYgc2VsZi5zZXJ2ZXIub3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgJyVzOiBTRVJWRVI6IG9wZW5pbmcgIiVzIiclKHN5cy5hcmd2WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSkKKworICAgICAgICBzdGF0dXMgPSBzdGFydGZpbGUub3BlbihmaWxlKQorICAgICAgICBpZiBzdGF0dXM6CisgICAgICAgICAgICByZXMgPSAnT3BlbmVkOiAiJXMiJyAlIGZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyA9ICdPcGVuIGZhaWxlZDogIiVzIicgJSBmaWxlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zdHJpbmcocmVzLCAndGV4dC9wbGFpbicpCisKKyAgICBkZWYgZ2V0X3JlcG9ydF9jb250ZXh0KHNlbGYsIHJlcG9ydCk6CisgICAgICAgIGNsYXNzIENvbnRleHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHJlcG9ydCBpcyBOb25lIG9yIHJlcG9ydCA9PSAnTm9uZSc6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5sb2FkX2NyYXNoZXMoKQorICAgICAgICAgICAgIyBEb24ndCBhbGxvdyBlbXB0eSByZXBvcnRzLgorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ05vIGNyYXNoZXMgZGV0ZWN0ZWQhJworICAgICAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICAgICAgYy50aXRsZSA9ICdjbGFuZyBzdGF0aWMgYW5hbHl6ZXIgZmFpbHVyZXMnCisKKyAgICAgICAgICAgIHN0ZGVyclN1bW1hcnkgPSAiIgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YToKKyAgICAgICAgICAgICAgICBpZiAnc3RkZXJyJyBpbiBpdGVtOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gcG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwgaXRlbVsnc3RkZXJyJ10pCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG5zID0gaXRlcnRvb2xzLmlzbGljZShvcGVuKHBhdGgpLCAwLCAxMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVyclN1bW1hcnkgKz0gJyVzXG4tLVxuJXMnICUgKGl0ZW0uZ2V0KCdzcmMnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dW5rbm93bj4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4obG5zKSkKKworICAgICAgICAgICAgYy5kZXNjcmlwdGlvbiA9ICIiIlwKK1RoZSBjbGFuZyBzdGF0aWMgYW5hbHl6ZXIgZmFpbGVkIG9uIHRoZXNlIGlucHV0czoKKyVzCisKK1NUREVSUiBTdW1tYXJ5CistLS0tLS0tLS0tLS0tLQorJXMKKyIiIiAlICgnXG4nLmpvaW4oW2l0ZW0uZ2V0KCdzcmMnLCc8dW5rbm93bj4nKSBmb3IgaXRlbSBpbiBkYXRhXSksCisgICAgICAgc3RkZXJyU3VtbWFyeSkKKyAgICAgICAgICAgIGMucmVwb3J0U291cmNlID0gTm9uZQorICAgICAgICAgICAgYy5uYXZNYXJrdXAgPSAiUmVwb3J0IENyYXNoZXMgPiAiCisgICAgICAgICAgICBjLmZpbGVzID0gW10KKyAgICAgICAgICAgIGZvciBpdGVtIGluIGRhdGE6ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGMuZmlsZXMuYXBwZW5kKGl0ZW0uZ2V0KCdzcmMnLCcnKSkKKyAgICAgICAgICAgICAgICBjLmZpbGVzLmFwcGVuZChwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0KCdmaWxlJywnJykpKQorICAgICAgICAgICAgICAgIGMuZmlsZXMuYXBwZW5kKHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5nZXQoJ2NsYW5nZmlsZScsJycpKSkKKyAgICAgICAgICAgICAgICBjLmZpbGVzLmFwcGVuZChwb3NpeHBhdGguam9pbihzZWxmLnNlcnZlci5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZ2V0KCdzdGRlcnInLCcnKSkpCisgICAgICAgICAgICAgICAgYy5maWxlcy5hcHBlbmQocG9zaXhwYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmdldCgnaW5mbycsJycpKSkKKyAgICAgICAgICAgICMgSnVzdCBpbiBjYXNlIHNvbWV0aGluZyBmYWlsZWQsIGlnbm9yZSBmaWxlcyB3aGljaCBkb24ndAorICAgICAgICAgICAgIyBleGlzdC4KKyAgICAgICAgICAgIGMuZmlsZXMgPSBbZiBmb3IgZiBpbiBjLmZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYpIGFuZCBvcy5wYXRoLmlzZmlsZShmKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGlzIGlzIGEgdmFsaWQgcmVwb3J0LiAgICAgICAgICAgIAorICAgICAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsICdyZXBvcnQtJXMuaHRtbCcgJSByZXBvcnQpCisgICAgICAgICAgICBpZiBub3QgcG9zaXhwYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAnSW52YWxpZCByZXBvcnQgSUQnCisgICAgICAgICAgICBrZXlzID0gc2VsZi5sb2FkX3JlcG9ydChyZXBvcnQpCisgICAgICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgICAgICBjLnRpdGxlID0ga2V5cy5nZXQoJ0RFU0MnLCdjbGFuZyBlcnJvciAodW5yZWNvZ25pemVkJykKKyAgICAgICAgICAgIGMuZGVzY3JpcHRpb24gPSAiIiJcCitCdWcgcmVwb3J0ZWQgYnkgdGhlIGNsYW5nIHN0YXRpYyBhbmFseXplci4KKworRGVzY3JpcHRpb246ICVzCitGaWxlOiAlcworTGluZTogJXMKKyIiIiUoYy50aXRsZSwga2V5cy5nZXQoJ0ZJTEUnLCc8dW5rbm93bj4nKSwga2V5cy5nZXQoJ0xJTkUnLCAnPHVua25vd24+JykpCisgICAgICAgICAgICBjLnJlcG9ydFNvdXJjZSA9ICdyZXBvcnQtJXMuaHRtbCcgJSByZXBvcnQKKyAgICAgICAgICAgIGMubmF2TWFya3VwID0gIiIiPGEgaHJlZj0iLyVzIj5SZXBvcnQgJXM8L2E+ID4gIiIiICUgKGMucmVwb3J0U291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0KQorCisgICAgICAgICAgICBjLmZpbGVzID0gW3BhdGhdCisgICAgICAgIHJldHVybiBjCisKKyAgICBkZWYgc2VuZF9yZXBvcnQoc2VsZiwgcmVwb3J0LCBjb25maWdPdmVycmlkZXM9Tm9uZSk6CisgICAgICAgIGRlZiBnZXRDb25maWdPcHRpb24oc2VjdGlvbiwgZmllbGQpOiAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGNvbmZpZ092ZXJyaWRlcyBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICBzZWN0aW9uIGluIGNvbmZpZ092ZXJyaWRlcyBhbmQKKyAgICAgICAgICAgICAgICBmaWVsZCBpbiBjb25maWdPdmVycmlkZXNbc2VjdGlvbl0pOgorICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdPdmVycmlkZXNbc2VjdGlvbl1bZmllbGRdCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXIuY29uZmlnLmdldChzZWN0aW9uLCBmaWVsZCkKKworICAgICAgICAjIHJlcG9ydCBpcyBOb25lIGlzIHVzZWQgZm9yIGNyYXNoZXMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYyA9IHNlbGYuZ2V0X3JlcG9ydF9jb250ZXh0KHJlcG9ydCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2Vycm9yKDQwMCwgZS5tZXNzYWdlKQorCisgICAgICAgIHRpdGxlID0gYy50aXRsZQorICAgICAgICBkZXNjcmlwdGlvbj0gYy5kZXNjcmlwdGlvbgorICAgICAgICByZXBvcnRpbmdGb3IgPSBjLm5hdk1hcmt1cAorICAgICAgICBpZiBjLnJlcG9ydFNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgZXh0cmFJRnJhbWUgPSAiIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0cmFJRnJhbWUgPSAiIiJcCis8aWZyYW1lIHNyYz0iLyVzIiB3aWR0aD0iMTAwJSUiIGhlaWdodD0iNDAlJSIKKyAgICAgICAgc2Nyb2xsaW5nPSJhdXRvIiBmcmFtZWJvcmRlcj0iMSI+CisgIDxhIGhyZWY9Ii8lcyI+VmlldyBCdWcgUmVwb3J0PC9hPgorPC9pZnJhbWU+IiIiICUgKGMucmVwb3J0U291cmNlLCBjLnJlcG9ydFNvdXJjZSkKKworICAgICAgICByZXBvcnRlclNlbGVjdGlvbnMgPSBbXQorICAgICAgICByZXBvcnRlck9wdGlvbnMgPSBbXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdGl2ZSA9IGludChnZXRDb25maWdPcHRpb24oJ1NjYW5WaWV3JywncmVwb3J0ZXInKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgYWN0aXZlID0gMAorICAgICAgICBmb3IgaSxyIGluIGVudW1lcmF0ZShzZWxmLnNlcnZlci5yZXBvcnRlcnMpOgorICAgICAgICAgICAgc2VsZWN0ZWQgPSAoaSA9PSBhY3RpdmUpCisgICAgICAgICAgICBpZiBzZWxlY3RlZDoKKyAgICAgICAgICAgICAgICBzZWxlY3RlZFN0ciA9ICcgc2VsZWN0ZWQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RyID0gJycKKyAgICAgICAgICAgIHJlcG9ydGVyU2VsZWN0aW9ucy5hcHBlbmQoJzxvcHRpb24gdmFsdWU9IiVkIiVzPiVzPC9vcHRpb24+JyUoaSxzZWxlY3RlZFN0cixyLmdldE5hbWUoKSkpCisgICAgICAgICAgICBvcHRpb25zID0gJ1xuJy5qb2luKFsgby5nZXRIVE1MKHIsdGl0bGUsZ2V0Q29uZmlnT3B0aW9uKSBmb3IgbyBpbiByLmdldFBhcmFtZXRlcnMoKV0pCisgICAgICAgICAgICBkaXNwbGF5ID0gKCdub25lJywnJylbc2VsZWN0ZWRdCisgICAgICAgICAgICByZXBvcnRlck9wdGlvbnMuYXBwZW5kKCIiIlwKKzx0ciBpZD0iJXNSZXBvcnRlck9wdGlvbnMiIHN0eWxlPSJkaXNwbGF5OiVzIj4KKyAgPHRkIGNsYXNzPSJmb3JtX2xhYmVsIj4lcyBPcHRpb25zPC90ZD4KKyAgPHRkIGNsYXNzPSJmb3JtX3ZhbHVlIj4KKyAgICA8dGFibGUgY2xhc3M9ImZvcm1faW5uZXJfZ3JvdXAiPgorJXMKKyAgICA8L3RhYmxlPgorICA8L3RkPgorPC90cj4KKyIiIiUoci5nZXROYW1lKCksZGlzcGxheSxyLmdldE5hbWUoKSxvcHRpb25zKSkKKyAgICAgICAgcmVwb3J0ZXJTZWxlY3Rpb25zID0gJ1xuJy5qb2luKHJlcG9ydGVyU2VsZWN0aW9ucykKKyAgICAgICAgcmVwb3J0ZXJPcHRpb25zRGl2cyA9ICdcbicuam9pbihyZXBvcnRlck9wdGlvbnMpCisgICAgICAgIHJlcG9ydGVyc0FycmF5ID0gJ1slc10nJSgnLCcuam9pbihbYHIuZ2V0TmFtZSgpYCBmb3IgciBpbiBzZWxmLnNlcnZlci5yZXBvcnRlcnNdKSkKKworICAgICAgICBpZiBjLmZpbGVzOgorICAgICAgICAgICAgZmllbGRTaXplID0gbWluKDUsIGxlbihjLmZpbGVzKSkKKyAgICAgICAgICAgIGF0dGFjaEZpbGVPcHRpb25zID0gJ1xuJy5qb2luKFsiIiJcCis8b3B0aW9uIHZhbHVlPSIlZCIgc2VsZWN0ZWQ+JXM8L29wdGlvbj4iIiIgJSAoaSx2KSBmb3IgaSx2IGluIGVudW1lcmF0ZShjLmZpbGVzKV0pCisgICAgICAgICAgICBhdHRhY2hGaWxlUm93ID0gIiIiXAorPHRyPgorICA8dGQgY2xhc3M9ImZvcm1fbGFiZWwiPkF0dGFjaDo8L3RkPgorICA8dGQgY2xhc3M9ImZvcm1fdmFsdWUiPgorPHNlbGVjdCBzdHlsZT0id2lkdGg6MTAwJSUiIG5hbWU9ImZpbGVzIiBtdWx0aXBsZSBzaXplPSVkPgorJXMKKzwvc2VsZWN0PgorICA8L3RkPgorPC90cj4KKyIiIiAlIChtaW4oNSwgbGVuKGMuZmlsZXMpKSwgYXR0YWNoRmlsZU9wdGlvbnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhdHRhY2hGaWxlUm93ID0gIiIKKworICAgICAgICByZXN1bHQgPSAiIiI8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+RmlsZSBCdWc8L3RpdGxlPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvc2NhbnZpZXcuY3NzIiAvPgorPC9oZWFkPgorPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciByZXBvcnRlcnMgPSAlKHJlcG9ydGVyc0FycmF5KXM7CitmdW5jdGlvbiB1cGRhdGVSZXBvcnRlck9wdGlvbnMoKSB7CisgIGluZGV4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcG9ydGVyJykuc2VsZWN0ZWRJbmRleDsKKyAgZm9yICh2YXIgaT0wOyBpIDwgcmVwb3J0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAgbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJlcG9ydGVyc1tpXSArICJSZXBvcnRlck9wdGlvbnMiKTsKKyAgICBpZiAoaSA9PSBpbmRleCkgeworICAgICAgby5zdHlsZS5kaXNwbGF5ID0gIiI7CisgICAgfSBlbHNlIHsKKyAgICAgIG8uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICB9CisgIH0KK30KKzwvc2NyaXB0PgorPGJvZHkgb25Mb2FkPSJ1cGRhdGVSZXBvcnRlck9wdGlvbnMoKSI+Cis8aDM+Cis8YSBocmVmPSIvIj5TdW1tYXJ5PC9hPiA+IAorJShyZXBvcnRpbmdGb3IpcworRmlsZSBCdWc8L2gzPgorPGZvcm0gbmFtZT0iZm9ybSIgYWN0aW9uPSIvcmVwb3J0X3N1Ym1pdCIgbWV0aG9kPSJwb3N0Ij4KKzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InJlcG9ydCIgdmFsdWU9IiUocmVwb3J0KXMiPgorCis8dGFibGUgY2xhc3M9ImZvcm0iPgorPHRyPjx0ZD4KKzx0YWJsZSBjbGFzcz0iZm9ybV9ncm91cCI+Cis8dHI+CisgIDx0ZCBjbGFzcz0iZm9ybV9jbGFiZWwiPlRpdGxlOjwvdGQ+CisgIDx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+CisgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiBzaXplPSI1MCIgdmFsdWU9IiUodGl0bGUpcyI+CisgIDwvdGQ+Cis8L3RyPgorPHRyPgorICA8dGQgY2xhc3M9ImZvcm1fbGFiZWwiPkRlc2NyaXB0aW9uOjwvdGQ+CisgIDx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+Cis8dGV4dGFyZWEgcm93cz0iMTAiIGNvbHM9IjgwIiBuYW1lPSJkZXNjcmlwdGlvbiI+CislKGRlc2NyaXB0aW9uKXMKKzwvdGV4dGFyZWE+CisgIDwvdGQ+Cis8L3RyPgorCislKGF0dGFjaEZpbGVSb3cpcworCis8L3RhYmxlPgorPGJyPgorPHRhYmxlIGNsYXNzPSJmb3JtX2dyb3VwIj4KKzx0cj4KKyAgPHRkIGNsYXNzPSJmb3JtX2NsYWJlbCI+TWV0aG9kOjwvdGQ+CisgIDx0ZCBjbGFzcz0iZm9ybV92YWx1ZSI+CisgICAgPHNlbGVjdCBpZD0icmVwb3J0ZXIiIG5hbWU9InJlcG9ydGVyIiBvbkNoYW5nZT0idXBkYXRlUmVwb3J0ZXJPcHRpb25zKCkiPgorICAgICUocmVwb3J0ZXJTZWxlY3Rpb25zKXMKKyAgICA8L3NlbGVjdD4KKyAgPC90ZD4KKzwvdHI+CislKHJlcG9ydGVyT3B0aW9uc0RpdnMpcworPC90YWJsZT4KKzxicj4KKzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImZvcm1fc3VibWl0Ij4KKyAgPGlucHV0IGFsaWduPSJyaWdodCIgdHlwZT0ic3VibWl0IiBuYW1lPSJTdWJtaXQiIHZhbHVlPSJTdWJtaXQiPgorPC90ZD48L3RyPgorPC90YWJsZT4KKzwvZm9ybT4KKworJShleHRyYUlGcmFtZSlzCisKKzwvYm9keT4KKzwvaHRtbD4iIiIlbG9jYWxzKCkKKworICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3N0cmluZyhyZXN1bHQpCisKKyAgICBkZWYgc2VuZF9oZWFkKHNlbGYsIGZpZWxkcz1Ob25lKToKKyAgICAgICAgaWYgKHNlbGYuc2VydmVyLm9wdGlvbnMub25seVNlcnZlTG9jYWwgYW5kCisgICAgICAgICAgICBzZWxmLmNsaWVudF9hZGRyZXNzWzBdICE9ICcxMjcuMC4wLjEnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNlbmRfZXJyb3IoNDAxLCAnVW5hdXRob3JpemVkIGhvc3QuJykKKworICAgICAgICBpZiBmaWVsZHMgaXMgTm9uZToKKyAgICAgICAgICAgIGZpZWxkcyA9IHt9CisgICAgICAgIHNlbGYuZmllbGRzID0gZmllbGRzCisKKyAgICAgICAgbyA9IHVybHBhcnNlLnVybHBhcnNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5maWVsZHMgPSBwYXJzZV9xdWVyeShvLnF1ZXJ5LCBmaWVsZHMpCisgICAgICAgIHBhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgodXJsbGliLnVucXVvdGUoby5wYXRoKSkKKworICAgICAgICAjIFNwbGl0IHRoZSBjb21wb25lbnRzIGFuZCBzdHJpcCB0aGUgcm9vdCBwcmVmaXguCisgICAgICAgIGNvbXBvbmVudHMgPSBwYXRoLnNwbGl0KCcvJylbMTpdCisgICAgICAgIAorICAgICAgICAjIFNwZWNpYWwgY2FzZSBzb21lIHRvcC1sZXZlbCBlbnRyaWVzLgorICAgICAgICBpZiBjb21wb25lbnRzOgorICAgICAgICAgICAgbmFtZSA9IGNvbXBvbmVudHNbMF0KKyAgICAgICAgICAgIGlmIGxlbihjb21wb25lbnRzKT09MjoKKyAgICAgICAgICAgICAgICBpZiBuYW1lPT0ncmVwb3J0JzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9yZXBvcnQoY29tcG9uZW50c1sxXSkKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWU9PSdvcGVuJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9vcGVuX3JlcG9ydChjb21wb25lbnRzWzFdKQorICAgICAgICAgICAgZWxpZiBsZW4oY29tcG9uZW50cyk9PTE6CisgICAgICAgICAgICAgICAgaWYgbmFtZT09J3F1aXQnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5oYWx0KCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zdHJpbmcoJ0dvb2RieWUuJywgJ3RleHQvcGxhaW4nKQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZT09J3JlcG9ydF9zdWJtaXQnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3JlcG9ydF9zdWJtaXQoKQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZT09J3JlcG9ydF9jcmFzaGVzJzoKKyAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzID0geyAnU2NhblZpZXcnIDoge30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JhZGFyJyA6IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFbWFpbCcgOiB7fSB9CisgICAgICAgICAgICAgICAgICAgIGZvciBpLHIgaW4gZW51bWVyYXRlKHNlbGYuc2VydmVyLnJlcG9ydGVycyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiByLmdldE5hbWUoKSA9PSAnUmFkYXInOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlc1snU2NhblZpZXcnXVsncmVwb3J0ZXInXSA9IGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXNbJ1JhZGFyJ11bJ0NvbXBvbmVudCddID0gJ2xsdm0gLSBjaGVja2VyJworICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXNbJ1JhZGFyJ11bJ0NvbXBvbmVudCBWZXJzaW9uJ10gPSAnWCcKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9yZXBvcnQoTm9uZSwgb3ZlcnJpZGVzKQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZT09J2Zhdmljb24uaWNvJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9wYXRoKHBvc2l4cGF0aC5qb2luKGtTaGFyZSwnYnVnY2F0Y2hlci5pY28nKSkKKyAgICAgICAgCisgICAgICAgICMgTWF0Y2ggZGlyZWN0b3J5IGVudHJpZXMuCisgICAgICAgIGlmIGNvbXBvbmVudHNbLTFdID09ICcnOgorICAgICAgICAgICAgY29tcG9uZW50c1stMV0gPSAnaW5kZXguaHRtbCcKKworICAgICAgICByZWxwYXRoID0gJy8nLmpvaW4oY29tcG9uZW50cykKKyAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5qb2luKHNlbGYuc2VydmVyLnJvb3QsIHJlbHBhdGgpCisKKyAgICAgICAgaWYgc2VsZi5zZXJ2ZXIub3B0aW9ucy5kZWJ1ZyA+IDE6CisgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICclczogU0VSVkVSOiBzZW5kaW5nIHBhdGggIiVzIiclKHN5cy5hcmd2WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoKQorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3BhdGgocGF0aCkKKworICAgIGRlZiBzZW5kXzQwNChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIkZpbGUgbm90IGZvdW5kIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZW5kX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgICMgSWYgdGhlIHJlcXVlc3RlZCBwYXRoIGlzIG91dHNpZGUgdGhlIHJvb3QgZGlyZWN0b3J5LCBkbyBub3Qgb3BlbiBpdAorICAgICAgICByZWwgPSBvcy5wYXRoLmFic3BhdGgocGF0aCkKKyAgICAgICAgaWYgbm90IHJlbC5zdGFydHN3aXRoKG9zLnBhdGguYWJzcGF0aChzZWxmLnNlcnZlci5yb290KSk6CisgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF80MDQoKQorICAgICAgICAKKyAgICAgICAgY3R5cGUgPSBzZWxmLmd1ZXNzX3R5cGUocGF0aCkKKyAgICAgICAgaWYgY3R5cGUuc3RhcnRzd2l0aCgndGV4dC8nKToKKyAgICAgICAgICAgICMgUGF0Y2ggZmlsZSBpbnN0ZWFkCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3BhdGNoZWRfZmlsZShwYXRoLCBjdHlwZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZGUgPSAncmInCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsIG1vZGUpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF80MDQoKQorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX2ZpbGUoZiwgY3R5cGUpCisKKyAgICBkZWYgc2VuZF9maWxlKHNlbGYsIGYsIGN0eXBlKToKKyAgICAgICAgIyBQYXRjaCBmaWxlcyB0byBhZGQgbGlua3MsIGJ1dCBza2lwIGJpbmFyeSBmaWxlcy4KKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgY3R5cGUpCisgICAgICAgIGZzID0gb3MuZnN0YXQoZi5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1MZW5ndGgiLCBzdHIoZnNbNl0pKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJMYXN0LU1vZGlmaWVkIiwgc2VsZi5kYXRlX3RpbWVfc3RyaW5nKGZzLnN0X210aW1lKSkKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgIHJldHVybiBmCisKKyAgICBkZWYgc2VuZF9zdHJpbmcoc2VsZiwgcywgY3R5cGU9J3RleHQvaHRtbCcsIGhlYWRlcnM9VHJ1ZSwgbXRpbWU9Tm9uZSk6CisgICAgICAgIGlmIGhlYWRlcnM6CisgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgY3R5cGUpCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIHN0cihsZW4ocykpKQorICAgICAgICAgICAgaWYgbXRpbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBtdGltZSA9IHNlbGYuZHluYW1pY19tdGltZQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiTGFzdC1Nb2RpZmllZCIsIHNlbGYuZGF0ZV90aW1lX3N0cmluZyhtdGltZSkpCisgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPKHMpCisKKyAgICBkZWYgc2VuZF9wYXRjaGVkX2ZpbGUoc2VsZiwgcGF0aCwgY3R5cGUpOgorICAgICAgICAjIEFsbG93IGEgdmVyeSBsaW1pdGVkIHNldCBvZiB2YXJpYWJsZXMuIFRoaXMgaXMgcHJldHR5IGdyb3NzLgorICAgICAgICB2YXJpYWJsZXMgPSB7fQorICAgICAgICB2YXJpYWJsZXNbJ3JlcG9ydCddID0gJycKKyAgICAgICAgbSA9IGtSZXBvcnRGaWxlUkUubWF0Y2gocGF0aCkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHZhcmlhYmxlc1sncmVwb3J0J10gPSBtLmdyb3VwKDIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwncicpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF80MDQoKQorICAgICAgICBmcyA9IG9zLmZzdGF0KGYuZmlsZW5vKCkpCisgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICBmb3IgYSxiIGluIGtSZXBvcnRSZXBsYWNlbWVudHM6CisgICAgICAgICAgICBkYXRhID0gYS5zdWIoYiAlIHZhcmlhYmxlcywgZGF0YSkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZF9zdHJpbmcoZGF0YSwgY3R5cGUsIG10aW1lPWZzLnN0X210aW1lKQorCisKK2RlZiBjcmVhdGVfc2VydmVyKGFkZHJlc3MsIG9wdGlvbnMsIHJvb3QpOgorICAgIGltcG9ydCBSZXBvcnRlcgorCisgICAgcmVwb3J0ZXJzID0gUmVwb3J0ZXIuZ2V0UmVwb3J0ZXJzKCkKKworICAgIHJldHVybiBTY2FuVmlld1NlcnZlcihhZGRyZXNzLCBTY2FuVmlld1JlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICByb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9idWdjYXRjaGVyLmljbyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL2J1Z2NhdGNoZXIuaWNvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZDM5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9idWdjYXRjaGVyLmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9zdGFydGZpbGUucHkgYi9jbGFuZy0yNjkwMzg1L3Rvb2xzL3NjYW4tdmlldy9zaGFyZS9zdGFydGZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmYmUyZAotLS0gL2Rldi9udWxsCisrKyBiL2NsYW5nLTI2OTAzODUvdG9vbHMvc2Nhbi12aWV3L3NoYXJlL3N0YXJ0ZmlsZS5weQpAQCAtMCwwICsxLDIwMyBAQAorIiIiVXRpbGl0eSBmb3Igb3BlbmluZyBhIGZpbGUgdXNpbmcgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gaW4gYSBjcm9zcy1wbGF0Zm9ybQorbWFubmVyLiBNb2RpZmllZCBmcm9tIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUxMTQ0My8uCisiIiIKKworX192ZXJzaW9uX18gPSAnMS4xeCcKK19fYWxsX18gPSBbJ29wZW4nXQorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3ZWJicm93c2VyCitpbXBvcnQgc3VicHJvY2VzcworCitfY29udHJvbGxlcnMgPSB7fQorX29wZW4gPSBOb25lCisKKworY2xhc3MgQmFzZUNvbnRyb2xsZXIob2JqZWN0KToKKyAgICAnJydCYXNlIGNsYXNzIGZvciBvcGVuIHByb2dyYW0gY29udHJvbGxlcnMuJycnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIGRlZiBvcGVuKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIENvbnRyb2xsZXIoQmFzZUNvbnRyb2xsZXIpOgorICAgICcnJ0NvbnRyb2xsZXIgZm9yIGEgZ2VuZXJpYyBvcGVuIHByb2dyYW0uJycnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcihDb250cm9sbGVyLCBzZWxmKS5fX2luaXRfXyhvcy5wYXRoLmJhc2VuYW1lKGFyZ3NbMF0pKQorICAgICAgICBzZWxmLmFyZ3MgPSBsaXN0KGFyZ3MpCisKKyAgICBkZWYgX2ludm9rZShzZWxmLCBjbWRsaW5lKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKKyAgICAgICAgICAgIGNsb3NlZmRzID0gRmFsc2UKKyAgICAgICAgICAgIHN0YXJ0dXBpbmZvID0gc3VicHJvY2Vzcy5TVEFSVFVQSU5GTygpCisgICAgICAgICAgICBzdGFydHVwaW5mby5kd0ZsYWdzIHw9IHN1YnByb2Nlc3MuU1RBUlRGX1VTRVNIT1dXSU5ET1cKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsb3NlZmRzID0gVHJ1ZQorICAgICAgICAgICAgc3RhcnR1cGluZm8gPSBOb25lCisKKyAgICAgICAgaWYgKG9zLmVudmlyb24uZ2V0KCdESVNQTEFZJykgb3Igc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJyk6CisgICAgICAgICAgICBpbm91dCA9IGZpbGUob3MuZGV2bnVsbCwgJ3IrJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZm9yIFRUWSBwcm9ncmFtcywgd2UgbmVlZCBzdGRpbi9vdXQKKyAgICAgICAgICAgIGlub3V0ID0gTm9uZQorCisgICAgICAgICMgaWYgcG9zc2libGUsIHB1dCB0aGUgY2hpbGQgcHJlY2VzcyBpbiBzZXBhcmF0ZSBwcm9jZXNzIGdyb3VwLAorICAgICAgICAjIHNvIGtleWJvYXJkIGludGVycnVwdHMgZG9uJ3QgYWZmZWN0IGNoaWxkIHByZWNlc3MgYXMgd2VsbCBhcworICAgICAgICAjIFB5dGhvbgorICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0c2lkJywgTm9uZSkKKyAgICAgICAgaWYgbm90IHNldHNpZDoKKyAgICAgICAgICAgIHNldHNpZCA9IGdldGF0dHIob3MsICdzZXRwZ3JwJywgTm9uZSkKKworICAgICAgICBwaXBlID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsaW5lLCBzdGRpbj1pbm91dCwgc3Rkb3V0PWlub3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9aW5vdXQsIGNsb3NlX2Zkcz1jbG9zZWZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1zZXRzaWQsIHN0YXJ0dXBpbmZvPXN0YXJ0dXBpbmZvKQorCisgICAgICAgICMgSXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMga2luZCBvZiB0b29scyAoZ25vbWUtb3Blbiwga2ZtY2xpZW50LAorICAgICAgICAjIGV4by1vcGVuLCB4ZGctb3BlbiBhbmQgb3BlbiBmb3IgT1NYKSBpbW1lZGlhdGVseSBleGl0IGFmdGVyIGxhdWNoaW5nCisgICAgICAgICMgdGhlIHNwZWNpZmljIGFwcGxpY2F0aW9uCisgICAgICAgIHJldHVybmNvZGUgPSBwaXBlLndhaXQoKQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdmaXhyZXR1cm5jb2RlJyk6CisgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5maXhyZXR1cm5jb2RlKHJldHVybmNvZGUpCisgICAgICAgIHJldHVybiBub3QgcmV0dXJuY29kZQorCisgICAgZGVmIG9wZW4oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVuYW1lLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGNtZGxpbmUgPSBzZWxmLmFyZ3MgKyBbZmlsZW5hbWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGFzc3VtZSBpdCBpcyBhIHNlcXVlbmNlCisgICAgICAgICAgICBjbWRsaW5lID0gc2VsZi5hcmdzICsgZmlsZW5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludm9rZShjbWRsaW5lKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisKKyMgUGxhdGZvcm0gc3VwcG9ydCBmb3IgV2luZG93cworaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKKworICAgIGNsYXNzIFN0YXJ0KEJhc2VDb250cm9sbGVyKToKKyAgICAgICAgJycnQ29udHJvbGxlciBmb3IgdGhlIHdpbjMyIHN0YXJ0IHByb2dhbSB0aHJvdWdoIG9zLnN0YXJ0ZmlsZS4nJycKKworICAgICAgICBkZWYgb3BlbihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Muc3RhcnRmaWxlKGZpbGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFtFcnJvciAyMl0gTm8gYXBwbGljYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICAjIGZpbGUgZm9yIHRoaXMgb3BlcmF0aW9uOiAnPFVSTD4nCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBfY29udHJvbGxlcnNbJ3dpbmRvd3MtZGVmYXVsdCddID0gU3RhcnQoJ3N0YXJ0JykKKyAgICBfb3BlbiA9IF9jb250cm9sbGVyc1snd2luZG93cy1kZWZhdWx0J10ub3BlbgorCisKKyMgUGxhdGZvcm0gc3VwcG9ydCBmb3IgTWFjT1MKK2VsaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgIF9jb250cm9sbGVyc1snb3BlbiddPSBDb250cm9sbGVyKCdvcGVuJykKKyAgICBfb3BlbiA9IF9jb250cm9sbGVyc1snb3BlbiddLm9wZW4KKworCisjIFBsYXRmb3JtIHN1cHBvcnQgZm9yIFVuaXgKK2Vsc2U6CisKKyAgICBpbXBvcnQgY29tbWFuZHMKKworICAgICMgQFdBUk5JTkc6IHVzZSB0aGUgcHJpdmF0ZSBBUEkgb2YgdGhlIHdlYmJyb3dzZXIgbW9kdWxlCisgICAgZnJvbSB3ZWJicm93c2VyIGltcG9ydCBfaXNjb21tYW5kCisKKyAgICBjbGFzcyBLZm1DbGllbnQoQ29udHJvbGxlcik6CisgICAgICAgICcnJ0NvbnRyb2xsZXIgZm9yIHRoZSBLREUga2ZtY2xpZW50IHByb2dyYW0uJycnCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtmbWNsaWVudD0na2ZtY2xpZW50Jyk6CisgICAgICAgICAgICBzdXBlcihLZm1DbGllbnQsIHNlbGYpLl9faW5pdF9fKGtmbWNsaWVudCwgJ2V4ZWMnKQorICAgICAgICAgICAgc2VsZi5rZGVfdmVyc2lvbiA9IHNlbGYuZGV0ZWN0X2tkZV92ZXJzaW9uKCkKKworICAgICAgICBkZWYgZGV0ZWN0X2tkZV92ZXJzaW9uKHNlbGYpOgorICAgICAgICAgICAga2RlX3ZlcnNpb24gPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW5mbyA9IGNvbW1hbmRzLmdldG91dHB1dCgna2RlLWNvbmZpZyAtLXZlcnNpb24nKQorCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5mby5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnS0RFJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBrZGVfdmVyc2lvbiA9IGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHJldHVybiBrZGVfdmVyc2lvbgorCisgICAgICAgIGRlZiBmaXhyZXR1cm5jb2RlKHNlbGYsIHJldHVybmNvZGUpOgorICAgICAgICAgICAgaWYgcmV0dXJuY29kZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5rZGVfdmVyc2lvbiA+ICczLjUuNCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVybmNvZGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9zLkVYX09LCisKKyAgICBkZWYgZGV0ZWN0X2Rlc2t0b3BfZW52aXJvbm1lbnQoKToKKyAgICAgICAgJycnQ2hlY2tzIGZvciBrbm93biBkZXNrdG9wIGVudmlyb25tZW50cworCisgICAgICAgIFJldHVybiB0aGUgZGVza3RvcCBlbnZpcm9ubWVudHMgbmFtZSwgbG93ZXJjYXNlIChrZGUsIGdub21lLCB4ZmNlKQorICAgICAgICBvciAiZ2VuZXJpYyIKKworICAgICAgICAnJycKKworICAgICAgICBkZXNrdG9wX2Vudmlyb25tZW50ID0gJ2dlbmVyaWMnCisKKyAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ0tERV9GVUxMX1NFU1NJT04nKSA9PSAndHJ1ZSc6CisgICAgICAgICAgICBkZXNrdG9wX2Vudmlyb25tZW50ID0gJ2tkZScKKyAgICAgICAgZWxpZiBvcy5lbnZpcm9uLmdldCgnR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEJyk6CisgICAgICAgICAgICBkZXNrdG9wX2Vudmlyb25tZW50ID0gJ2dub21lJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZm8gPSBjb21tYW5kcy5nZXRvdXRwdXQoJ3hwcm9wIC1yb290IF9EVF9TQVZFX01PREUnKQorICAgICAgICAgICAgICAgIGlmICcgPSAieGZjZTQiJyBpbiBpbmZvOgorICAgICAgICAgICAgICAgICAgICBkZXNrdG9wX2Vudmlyb25tZW50ID0gJ3hmY2UnCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBkZXNrdG9wX2Vudmlyb25tZW50CisKKworICAgIGRlZiByZWdpc3Rlcl9YX2NvbnRyb2xsZXJzKCk6CisgICAgICAgIGlmIF9pc2NvbW1hbmQoJ2tmbWNsaWVudCcpOgorICAgICAgICAgICAgX2NvbnRyb2xsZXJzWydrZGUtb3BlbiddID0gS2ZtQ2xpZW50KCkKKworICAgICAgICBmb3IgY29tbWFuZCBpbiAoJ2dub21lLW9wZW4nLCAnZXhvLW9wZW4nLCAneGRnLW9wZW4nKToKKyAgICAgICAgICAgIGlmIF9pc2NvbW1hbmQoY29tbWFuZCk6CisgICAgICAgICAgICAgICAgX2NvbnRyb2xsZXJzW2NvbW1hbmRdID0gQ29udHJvbGxlcihjb21tYW5kKQorCisgICAgZGVmIGdldCgpOgorICAgICAgICBjb250cm9sbGVyc19tYXAgPSB7CisgICAgICAgICAgICAnZ25vbWUnOiAnZ25vbWUtb3BlbicsCisgICAgICAgICAgICAna2RlJzogJ2tkZS1vcGVuJywKKyAgICAgICAgICAgICd4ZmNlJzogJ2V4by1vcGVuJywKKyAgICAgICAgfQorCisgICAgICAgIGRlc2t0b3BfZW52aXJvbm1lbnQgPSBkZXRlY3RfZGVza3RvcF9lbnZpcm9ubWVudCgpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udHJvbGxlcl9uYW1lID0gY29udHJvbGxlcnNfbWFwW2Rlc2t0b3BfZW52aXJvbm1lbnRdCisgICAgICAgICAgICByZXR1cm4gX2NvbnRyb2xsZXJzW2NvbnRyb2xsZXJfbmFtZV0ub3BlbgorCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGlmIF9jb250cm9sbGVycy5oYXNfa2V5KCd4ZGctb3BlbicpOgorICAgICAgICAgICAgICAgIHJldHVybiBfY29udHJvbGxlcnNbJ3hkZy1vcGVuJ10ub3BlbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gd2ViYnJvd3Nlci5vcGVuCisKKworICAgIGlmIG9zLmVudmlyb24uZ2V0KCJESVNQTEFZIik6CisgICAgICAgIHJlZ2lzdGVyX1hfY29udHJvbGxlcnMoKQorICAgIF9vcGVuID0gZ2V0KCkKKworCitkZWYgb3BlbihmaWxlbmFtZSk6CisgICAgJycnT3BlbiBhIGZpbGUgb3IgYW4gVVJMIGluIHRoZSByZWdpc3RlcmVkIGRlZmF1bHQgYXBwbGljYXRpb24uJycnCisKKyAgICByZXR1cm4gX29wZW4oZmlsZW5hbWUpCg==